본문 바로가기

시스템 해석

배달대행, 퀵서비스, 기타 물류 프로그램에서 지지기를 이해하기 위한 기술적 배경(운영체제 원리에 따른)

  • 주의
    1. 포괄적인 원리를 설명한다
      이 글에서 지지기의 뜻/기능/효과를 간단히 언급했으므로 여기서는 기술적 배경을 설명하고자 한다.
      골때리게도 난 지지기를 구경조차 한 적이 없다.
    2. 만약 컴맹이라면 난해한 부분이 있을 것.
      그러나 당신이 컴퓨터를 알아야 한다는 전제를 깔고 쓰는 글이 아니다.
      오히려 이 글을 읽고
      누가 알겠는가...50대 알콜중독자 딸배가 이런 글을 쓴다고? 나도 오늘부터 컴퓨터 공부하자 하는 젊은 딸배가 있을지.
    3. 부정확한 용어나 과장을 사용한다.
      공돌이놈들도 부심이란 게 있어서 예를 들어 IP 를 설명하면서 '패킷' 이란 용어를 쓰면 그것 갖고 깐다.
      패킷은 링크계층 용어, 일단 커널 네트웍루틴에 진입하면 데이타그램 이란 용어를 써야 한다.
      벌써 어디선가 욕이 들리는 것 같은데??
      우선은 젊었을 때 컴퓨터 공부한 수준을 많이 잃어버렸고
      다음으로 이 글은 공돌이를 대상으로 하는 게 아니라 배달대행이나 퀵서비스 딸배 및 대리,화물,택시... 종사자 중 컴퓨터와 무관한 사람도 무리없이 이해할 수 있도록 하는 게 목표.
  • 요약
    1. 프로세서는 서로 독립된 메모리블럭이다.

      당신의 PC나 스마트폰 등 흔히 볼 수 있는 것들의 운영체제에서는 A 프로세서(프로세서란 말이 어려우면 프로그램/앱)가 B 프로세서의 영역을 읽을 수 없다.
    2. 위 원칙을 깨려면 root(관리자) 권한이 필요하다.

      관리자 권한의 프로세서도 독립된 하나의 블럭이기는 마찬가지인데 얘는 시스템 전체를 읽고 쓸 수 있다.
    3. 이런 설계에 의한 지지기의 유형

      지지기는 다음 유형을 갖는다.
      1. 관리자 권한을 가진 지지기
      2. 원래 앱을 분석, 수정한 지지기
      3. 매크로식 지지기
      큰 그림으로 이렇다는 것이고 2번의 경우 원래 앱이 어떻게 설계되어 있는가에 따라 별도의 프로세서로 가능할 수도 있다. 예를 들어 공유메모리 지원.
  • 설명
    1. 모든 프로그램/앱은 제각기 독방에 갇혀 있다.
      이와 반대되는 게 옛날 도스
      현대에도 일부 임베디드 장비, 내가 뜯어본 게 아니라 확정하지는 못하겠는데 예를 들어 싸구려 오토바이에 들어있는 ECU 같은 건 기능이 간단하므로 도스처럼 구현했을 수 있다.
      그 이외에는 모조리 위 원칙이 통한다.
      컴퓨터가 교도소고 프로세서는 개별 독방이라 생각하면 되겠다.
      당신이 보고 있는 이 브라우저도 독방에 갖혀갇혀 있고 리니지도 독방에 갇혀 있고 디아블로 독방, 메모장 독방, 배민 독방, 바로고 독방, 인성 독방...
      브라우저를 하나 실행시키고 인터넷을 하면서 작업관리자를 보면 크롬이나 엣지가 여러개 떠 있지? 난 브라우저 한개만 실행했는데 왜??
      이것도 네이버 탭과 유투브 탭이 별개의 프로세서로 돌아가는 거라 유투브 보다가 에러나도 네이버탭에는 아무 영향을 안 주는 원리인데 이게 장점이자 단점이다.
      네이버에 로그인되어 있어도 유투브의 어떤 기능이 네이버의 내 아이디를 읽을 수 없음.(크롬이 구글 것이고 유투브도 구글 것이니까... 그럴 가능성이 있는 거 아니냐...또는 크롬에 확장기능을 설치하느냐... 뭐 이런 것과는 논점이 다른 얘기)

      어떤 실행파일이 메모리에 로딩되면(.exe 더블클릭) 그 각각이 운영체제라는 간수에 의해 프로세서라는 독방으로 수감된다고 했다.
      교도소에 죄수번호가 있듯 운영체제도 각 프로세서에 번호를 붙이는데 이게 PID 이고 그 프로세서의 생활기록부 같은 게 TASK_STRUCT.
      관리자 권한으로 실행한 프로그램 또한 독방에 갖힌 일개 프로세서의 구조를 갖는 건 똑같다. 똑같은데
      관리자 프로세서가 운영체제에 나 3번 방 면담 좀 할께 하고 요청하면 운영체제가 이를 대행해준다는 차이.

      디스크에 10기가짜리 거대 야구동영상(?)이 있을 때 이걸 지우게 되면 10GB 의 저장공간 전체 데이타는 그대로 두고 파일시스템의 메타데이타 부분, 그러니까 윈도우의 클러스터, 리눅스의 inode 등 저장공간에 해당하는 블럭번호에 플래그만 사용하지 않음으로 바꾸는데(데이타복원, 디지탈포렌식 어쩌고 하면서 지운 것도 복구한다는 원리) 그것과 마찬가지로
      운영체제가 프로세서를 관리할 때도 PID 안에 테스크 자료구조 안에 그 프로세서에 할당한 메모리의 블럭번호,그러니까 페이지번호를 기록한다.
      파일시스템에서 파일을 삭제할 때와 똑같은 원리로 운영체제가 프로세서를 종료시킬 때도 실제 메모리를 초기화하는 게 아니라 사용중으로 표시된 페이지번호를 비어있음 플래그로 바꾼 후 PID 관련 모든 자료구조만 날린다.

      자... 1번 프로세서의 생활기록부에 페이지번호 1000번이 운영체제에 의해 할당된 적이 없는데(가상주소 + 페이지폴트라는 방식으로 할당되는데 일단은) 1번 프로세서가 1000번을 읽으려고 시도하면?
      1번 프로세서는 반드시 관리자 권한을 가져야 함. 관리자모드와 커널모드는 다르다. 컴퓨터에 능숙한 사람 중에도 이걸 혼동하는 경우가 많은데
      운영체제 역시 프로세서 구조의 꼭지점으로 완전히 같은 설계에 기반하여 최초로 부팅될 때 커널영역 1GB(용량은 예시) + 나머지 메모리 전체를 사용자영역으로 딱 나눠버리기 때문에 사용자 영역에 있는 어떤 것도 커널영역의 1GB 안으로는 들어올 수 없다.
      운영체제에 따라 프로세서가 관리자권한일 때 커널과의 I/O 를 어디까지 허용하느냐의 정도가 달라서 그렇지 100% 커널영역과 사용자영역은 분리되어 있음.
      이것의 좋은 예가 윈도우에서 관리자 권한을 가져도 MS가 커널에 코드로 내장한 업데이트 관련 로직을 MS가 허용한 범위 밖으로 수정할 수 없는 등.

      init 후 어떤 프로그램이 실행될 때
      그게 관리자 권한이든 뭐든 무조건 사용자영역에 해당하는 메모리블럭을 할당받게 되고 이 번호를 관리하는 생활기록부, 자료구조만 커널영역 안에 저장되는데... 관리자권한을 가진 프로세서는 말하자면
      다른 죄수의 방을 직접 방문할 수 있는 게 아니라 커널에 방문요청을 하면 커널이 대신 갔다와서 보고 알려주는 구조로 일반죄수가 이 요청을 하면 커널이 생깜.
      루트가 일반계정의 프로세서를 강종시킬 때도 직접 그 방을 폭파시킬 수 있는게 아니라 커널에 요청을 하면 커널이 자신이 관리하던 TASK_STRUCT 를 날리는 구조.

      지금... 너무 나가고 있는데
      딸배 중에는 젊은 사람이 많고 그 중에는 컴퓨터 공부를 어떻게 해야 하는지 궁금하기는 한데 딸배 수준에 맞는 레퍼런스를 검색하는 방법조차 모르기에 그냥 오토바이만 타는 경우도 있을 수 있다.
      틀딱딸배가 이런 글을 쓴다면 이새끼도 하는데 나라고 못할 것 없지 라는 스탠스를 취하긴 좀 쉽지 않을까?
      더구나 너 대졸이잖아? 난 고졸이니까 허들 엄청 낮춰준 거다.
    2. 스마트폰에서 관리자권한은 일반적으로 불가
      컴퓨터는 뭐 좀 할려면 관리자모드가 필요하네 어쩌네 짜증나니까 그냥 일상적으로 관리자모드를 쓰는 사람이 많은 모양인데 그러지마라...
      모든 프로그램은 버그가 있고 당연히 운영체제도 그러하므로 맹신하면 안 되지만 흔히 뭐 메일의 첨부파일만 클릭해도 다~ 털린다.... 이런 얘기는 일단 PC 를 관리자모드로 로그인하고 쓴다는 걸 당연히 전제했을 때나 통하는 것이지 말도 안 되는 소리.
      당신이 PC를 일반사용자로 로그인하고, 예를 들어 HTS 로 주식을 한다고 했을 때 기타의 다른 어떤 프로그램도 HTS 의 메모리상 데이타를 조작할 수 없다.
      설령 그 PC 에 실수로 해킹프로그램을 다운받아 설치하고 그걸 실행한다고 쳐도(설치단계부터 관리자모드에 걸리지만) 그 해킹프로그램 또한 아직은 독방에 수감된 일반죄수 상태이기 때문에 해커 아니라 해커 할배가 와도 불가능함.
      HTS 만 쓰려는데 안랩이니 애니사인이니 온갖 잡동사니들이 총출동해서 관리자모드 필요하다 고 귀찮게 구는 것도 보안 프로그램 자체도 그냥 실행하면 독방에 갖힌 일개 죄수나부랑이에 불과하니까.

      즉 보안프로그램이든 해킹 프로그램이든 일반계정으로 되어 있으면 할 수 있는 게 아무것도 없다.

      다만, 이 글에서는 메모리를 얘기하는 것이고 파일은 또 다른데 해킹프로그램이 일반계정으로 실행되면 그 프로그램이 디스크에 있는 파일 중 계정 소유자가 만든 파일이거나 남의 소유라도 읽기가 허용된 파일은 읽을 수 있으므로 빼내간다.
      그러나 제대로 된 프로그램은 클라이언트 파일로 중요 정보를 저장하지 않으며 저장해야 한다면 유출될 수 있다는 전제를 깔고 암호화를 하기 때문에 자기 야동이나 걱정하면 된다 ㅠㅠ
      그러니까 배민의 AI배차(내 표현으로 지수배차)에서 기사지수를 조작하려고 어떤 해킹 개고수가 와도 불가능한 게 배민 배차앱에는 기사지수가 저장되지 않는다.(까봐야 알겠지만 상식적으로 없다)

      하여튼
      이걸 매우 강화해서
      아예 관리자모드란 걸 막아놓고 파는 게 스마트폰.
      안드로이드에서는 루팅, 아이폰에서는 탈옥을 해야만 가능한데 이걸 하게 되면 많은 여러 난관 + 루팅체크로직이 있는 모든 앱 동작하지 않음.
      근데 이것도 단순 루팅이나 탈옥이 아니라 운영체제를 커스텀으로 아예 싸그리 갈아엎어버리면 프리패스이긴 한데 지지기 개발자가 고객에게 당신 스마트폰 엎어드릴께요... 하는식으로 장사할 수는 없으니까 논외.
  • 지지기 유형에 따른 설명
    1. 관리자권한을 가진 지지기는 스마트폰에 손을 대야 하므로 논외인데 혹시나 모르겠다.
      딸배 중 어떤 사람은 스스로 만들어서 조용히 혼자 쓰고 있을지도.
      이게 되면 지지기를 만드는 입장에서도 쉽고 성능도 강력하다.
    2. 위 1번에 걸리는 게 워낙 많고 특히 지지기 개발자는 자기가 직접 오토바이를 타는 게 아니라 그 프로그램을 판매해 돈을 버는 목적이므로 핸드폰에 손을 대지 않고 그냥 앱 설치만으로도 동작하는 지지기를 만들어야 하는데
      정말 귀에 피가 나겠지만 지지기 아니라 지지기 할배라도, 알란콕스가 프로그래밍을 해도
      배민이나 바로고, 인성을 따로 실행시키고 지지기도 따로 실행시키고... 프로세서가 제각기 2개인데 각자의 독방에서 상대를 어째보겠다...하는 시도는 씨알도 안 먹히는 소리.
      따라서 타겟 프로그램의 소스를 분석, 그와 유사한 동작을 하는 프로그램을 직접 만들어 지지기 프로세서 단독으로 띄워야 하는 것.
      이걸 리버싱(Reverse Engineering, 관심있으면 검색)이라 하는데 실행파일을 개발자가 프로그래밍할 때의 단계로 복원하는 과정이라 생각하면 되고 안드로이드에서는 이게 PC 보다 쉬운데 원리상 소스난독화 등 온갖 트릭을 써도 작정하고 덤비는 사람에게는 리버싱을 원천적으로 막을 방법이 없다.

      이걸 하게 되면 그 소스를 그대로 복사해 내 IDE(프로그래밍 툴)에 붙여넣기한 후 변수, 함수 일부 수정하고 내가 원하는 기능, 예를 들어 오더의 문자열을 추출해 정규식으로 판단하는 함수 추가... 컴파일 - 실행
      원리상 방법이 존재한다는 말이지 프로그래밍이란 게 자기가 프로그래밍을 해도 주석 안 달아놓으면 몇 달 후 그걸 수정할 때 헤매는 경우 많은데 남이 만든 프로그램, 그것도 본인 말고는 해석하기 헷갈리도록 트릭까지 쓴 걸 분석한다는 건 상당한 노가다가 요구되는 일임.

      그러나 배차프로그램이란 게 사실 배민 같은 지수배차의 서버가 복잡한 것이지 핸드폰의 클라이언트는 복잡할 게 없다. 그러니까 분석해야할 분량이 적다. 분량이 적을 뿐만 아니라 대부분의 기생프로그램이란 게 프로그램의 동작을 관찰하고 큰 틀과 디자인은 그대로 유지한 채 필요한 일부 변수, ID 를 어디서 가져와 어디에 저장하는가, IP 체크를 어디서 하는가.... 이런 부분만 찾아서 건너뛰도록 하거나 값을 바꿔버리는 유형이라 소스코드를 낱낱이 분석하는 리버싱이 아니다.
      하여튼 내가 해본 건 아니긴 한데 지지기가 음성적으로 많이 유통되고 있는 앱이라면 그 앱의 사용자가 일단 많아야 하고(많이 팔아먹어야 하니까) 다음으로 그 앱의 소스분석이 비교적 쉽다는 얘기가 되겠다.
    3. 매크로는 예전부터 게임 오토사냥 등에 많이 사용되던 방식인데
      특정 포탈을 타고 가서 칼림의 눈 아이템을 1000개 수집하는 퀘스트를 한다고 쳤을 때
      퀘스트를 주는 NPC 머리위 글자이미지/포탈의이미지나 좌표/사냥터의 몹 중 칼림의 뇌를 주는 몹 이미지/드랍 아이템 중 칼림의 뇌 이미지.... 등을 저장한 후 컴퓨터 화면 전체를 0.1 초마다 한 번씩 스캔하고 있다가 NPC 이름과 유사도 80% 픽셀이 검색되면 클릭... 다가가서 퀘스트 받기... 포탈 이미지 검색...뛰어감...특정 몹 이미지가 검색될 때까지 맵을 뛰어댕기다가 검색되면 잡고...아이템 중 칼림의 뇌와 일치하면 줍고...

      이 짓 많이들 해봤지? ㅋㅋ
      게임은 보는 각도에 따라 이미지가 다르기 때문에 상당한 삽질이 필요하다. 그런데도 많은 게임에서 매크로를 만들어내는데 화면이 단순하고 정적인 오더창이야 뭐 만들려면 금방.
      화면의 특정 좌표를 클릭하거나 특정 이미지를 저장해두고 화면의 와꾸에 자동반응하는 건 위의 대 원칙, A 프로세서가 B프로세서의 영역을 읽을 수 없다는 것을 위반하지 않으므로 앱 종류에 제약을 받지 않지만 원래 앱이 디자인 바꾸면 삽질로 수정해야 함.
      즉 이 방식은 원래 앱의 메모리 안을 읽거나 쓰는 게 아니므로 당연히 착지가 구로동 이라는 오더를 구로동이라는 문자열로 읽는 게 아니라 이미지로 읽어서 마치 OCR 처럼 문자열로 추출하는 과정이 필요하다. 따라서
      삽질 + 속도문제 + 일부 오류
  • 뇌피셜
    1. 그러고보니 인성 지지기 이상하다
      문득, 갑자기 드는 생각인데
      인성퀵의 순정지지기를 보면 거리범위 4km 를 해놓고 다니는데도 불구하고 오산에 있는 놈한테 픽업지가 종로인 오더가 자동으로 잡히는 버그가 있다. 가끔 있는 게 아니라 하루 종일로 치면 10번은 넘음.
      도저히 이핸 안 가는 카카오 맵과 주소연동(목적지 주소보기를 클릭하면 카카오맵에 입력되는 주소가 앱의 것과 다를 때가 매우 많으므로 반드시 확인)도 이거라면 설명이 되네??

      난 당연히 인성 지지기는 2번이라 생각하고 이 글을 쓰고 있었는데 인성 이새끼들 진짜...
      자기가 만든 프로그램의 지지기를 혹시 이런 초급 매크로 방식으로 이미지추출하고 있는 거 아녀??
      갑자기 멘붕이 와서 어케 진도를 나가야할지 모르겠다.
      인성의 거리버그, 주소연동버그가 어이없어서 하는 얘기고(화면 이미지에서 문자열 추출하면 이런 오류가 있음.)
      매크로의 단점이 윈도우가 포그라운드여야 한다.
  • 여담
    1. 요 위에까지 써 놓고 한 콜 뛰고 옴
      오늘 일요일인데 원래 일요일은 퀵서비스 오더 없거든
      오산에서 평택 청북 30000원에 뜨길래 에라 모르겠다 하고 갔다가 혹시나 하고 대기 좀 타봤는데 뭐 그냥 왕복 60km 에 3만원이니까 키로당 500원짜리 하고 들어와 막걸리 먹고 있다.

      인생 뭐 있나...예전에 노숙도 해봤는데 까짓거
Recent Posts
Popular Posts
Tags
더보기
Recent Comments