Memget Project for Mobile [Android] 사용법 입니다.


DOWNLOAD SITE : https://unsigned.kr/



현재 버전(1.5.12.192)기준으로 작성하겠습니다.


*****************************************

*            Memget Project             *

*      Memget Mobile for Android        *

*       last update : 2017.02.26        *

*               by nvdark               *

*          Version : 1.5.12.192          *

*****************************************

Usage : ./mm OPTION [...]

OPTIONS :

        # 1 ######################

        -m PATH [PATH ...] : File system event Monitor

                ex) ./mm -m /data/local /system


        # 2 ######################

        -p PID  : Function using PID, Read below

                -i LIB_PATH  : Library injection

                        ex) ./mm -p [PID] -i /data/lib.so


                -s(Not yet) : SVC Monitor

                        ex) ./mm -p [PID] -s


                -d OPTIONS: Debugging mode

                        ex) ./mm -p [PID] -d

                        -m : Menu mode : Step by Step

                                ex) ./mm -p [PID] -d -m

                        -n [NUMBER] : Select syscall number With Menu mode

                                      Step by Syscall number you selected

                                ex) ./mm -p [PID] -d -n [SYSCALL NUMBER]

                        -s : Data search mode (not yet)

                                ex) ./mm -p [PID] -d -f 0x00003233


        # 3 ######################

        -t [EVENT] : Function Using Touch event

                ex) ./mm -t /dev/input/event1


        # 4 ######################

        -d [DEX FILE] : Dex file class dump

                ex) ./mm -d classes.dex


                -d : Dalvik format

                        ex) ./mm -d classes.dex -d


 - End -

PS : 한글화 버전 별도 배포


총 4가지 기능으로 되어 있으며, using을 보시면 '# [num] ####################' 으로 구분되어있습니다.


1. 파일 시스템 이벤트 모니터


 취약점 점검을 하다보면 중요정보가 파일로 저장되고 있는지 확인해야할때가 있습니다. 또는 분석 시 순간적으로 생성되어졌다가 삭제되는 파일들도 존재합니다. 해당 옵션을 쓰면 모니터링 하고자 하는 디렉토리를 기준으로 파일 시스템 이벤트를 모니터링 합니다. 

 

 사용법은 다음과 같습니다. 


./mm -m [PATH ...] 

 ex ./mm -m /data/data/abcd /data/app/abcd /data/data/eeee


  모니터링 하고자 하는 경로를 쓰시면 하위 디렉토리까지 포함하여 모니터링을 시작합니다. 단, /data/local/tmp/은 하지마세요...버그 있습니다. /system이나 / 로 해도 상관은 없으나....죽을 확율이 클거라 생각됩니다...


실행하면 다음과 같은 화면이 나타납니다. 


root@zerofltektt:/data/local/tmp # ls -al /data/data | grep line

drwxr-x--x u0_a196  u0_a196           2018-04-04 09:06 jp.naver.line.android

aver.line.android/ /data/app/jp.naver.line.android-1/                         <


[+]File system event mode

[+]start...

[+]make temp directory : /data/local/tmp/mm_cmp

[+]Initalizing...

[+]Monitoring file System event

[+]Init for accessing

[+]Allocate memory for watch descriptors

[+]Target : total 14 directorise

[+]Listening


아무 앱이나 해봣습니다. /data/data/jp.naver.line.android와 /data/app/jp.naver.line.android-1/ 을 함께 모니터링 해봤습니다.

실행하고 나면 총 하위디렉토리 포함 총 14개의 디렉토리가 발견되었고 모니터링을 시작한다고 표시됩니다.


또한, temp directory가 있습니다. 새로 생성되거나 수정된파일들은 모드 /data/local/tmp/mm_cmp 폴더로 자동 복사가 됩니다. 때문에 순간적으로 생성되는 파일들도 별도의 분석없이 다 확인이 가능합니다. 


점검 시 /data/local/tmp/mm_cmp 폴더 내 모인 파일들에서만 중요정보를 확인해보시면 될것 같습니다. 검색 기능은 추가예정이나 귀찮아서 못하고 못하고 있습니다. 추후 추가 예정이니다. 


모니터링은 다음과 같이 표시됩니다. 


[OPEN]: /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[MODIFY] : /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[MODIFY] : /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[OPEN]: /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[CLOSE_NOWRITE] : /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[OPEN]: /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[CLOSE_NOWRITE] : /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[OPEN]: /data/data/jp.naver.line.android//databases [directory]

[OPEN]: /data/data/jp.naver.line.android//databases/ [directory]

[CLOSE_NOWRITE] : /data/data/jp.naver.line.android//databases [directory]

[CLOSE_NOWRITE] : /data/data/jp.naver.line.android//databases/ [directory]

[MODIFY] : /data/data/jp.naver.line.android//databases/TsEvent [file]

[MODIFY] : /data/data/jp.naver.line.android//databases/TsEvent [file]

[OPEN]: /data/data/jp.naver.line.android//databases/TsEvent [file]

[CLOSE_NOWRITE] : /data/data/jp.naver.line.android//databases/TsEvent [file]

[OPEN]: /data/data/jp.naver.line.android//databases/TsEvent [file]

[CLOSE_NOWRITE] : /data/data/jp.naver.line.android//databases/TsEvent [file]

[MODIFY] : /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[OPEN]: /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[CLOSE_NOWRITE] : /data/data/jp.naver.line.android//databases/TsEvent-journal [file]

[CLOSE_WRITE] :/data/data/jp.naver.line.android//databases/TsEvent-journal [file]


파일 또는 디렉토리를 열거나 닫을때, 수정할때, 생성할때 등 이벤트를 표시해 줍니다. 


생성, 변경 등의 이벤트가 발생한 파일에 대해서는 /data/local/tmp/mm_cmp에 모이게 됩니다.


130|root@zerofltektt:/data/local/tmp # cd mm_cmp

root@zerofltektt:/data/local/tmp/mm_cmp # ls -al

-rw------- root     root        20480 2018-04-04 09:11 TsEvent

-rw------- root     root        12824 2018-04-04 09:11 TsEvent-journal

-rw------- root     root        12824 2018-04-04 09:11 TsEvent-journal_cmp

-rw------- root     root          741 2018-04-04 09:11 com.google.android.gms.measurement.prefs.xml

-rw------- root     root          741 2018-04-04 09:11 com.google.android.gms.measurement.prefs.xml_cmp

-rw------- root     root        16384 2018-04-04 09:11 google_app_measurement_local.db

-rw------- root     root        16384 2018-04-04 09:11 google_app_measurement_local.db_cmp

-rw------- root     root       311296 2018-04-04 09:11 naver_line

-rw------- root     root        12824 2018-04-04 09:11 naver_line-journal

-rw------- root     root        20480 2018-04-04 09:11 naver_line_push_history

root@zerofltektt:/data/local/tmp/mm_cmp #


_cmp 라는 파일들이 있는데, 사실 변경전과 변경 후를 비교하기 위해서 만들었던 파일인데 다른곳에 신경쓰다가 까먹고 안했습니다...


2. PID가 필요한 기능들


 pid가 필요한 기능들을 모아 뒀습니다. 


사용법은 다음과 같습니다. 


./mm -p [PID] [OPTIONS]


-i : 라이브러리 인젝션 기능입니다. 4.x 버전까지는 잘 동작하나 5.x부터는 selinux가 강화되어 /system/lib로 복사 후 인젝션을 진행해야 합니다.

 현재는 별도의 인젝션 도구를 만들어 사용하고 있으나 자동화가 되어있지 않습니다...


-s : SVC 모니터라고 해놨으나 사실 구현하다가 왜 이걸 만들고 있나...쓸곳도 없는데....라는 생각에 접었습니다. 무시하셔도 무방합니다.


[+]Pid : 17531

[+]svc checker...

[+]Attached...

[+] recvfrom(0x70, *buf, 0x8d8, 0x40)

[+] recvfrom(0xe0, , 0x8d8, 0x40)

[+] sendto(0x70, , 0x10, 0x4040)

[+] recvfrom(0x70, *buf, 0x8d8, 0x40)

[+] recvfrom(0xe0, , 0x8d8, 0x40)

[+] recvfrom(0x70, *buf, 0x8d8, 0x40)

[+] recvfrom(0xfffffff5, , 0x8d8, 0x40)


-d : 디버깅옵션 입니다. 디버깅을 차단하기 위한 방법으로 gdb같은 특정 프로그램을 막는경우 테스트하기 위해 만들었습니다.  이것도 딱히 쓸 일은 없을듯 하여 자세한 설명은 생략하도록 하겠습니다.


[+]Pid : 17531

[+]Debugging mode

[+]Mode : None(0)

[+]Starting...

REGS==========================================================[0]

pc=0xf765a41c lr=0xf75d574b sp=0xff847008 fp=0x12c04dc0

ip=         0 cpsr=0x600d0010

r0=       0x1 r1=0xff847008 r2=0xf75d9ba0 r3=         0

r4=      0x32 r5=       0x1 r6=0x12c04dc0 r7=     0x107

r8=0x70ecdca8 r9=0xf4c28000 r10=         0 o_r0=       0x1

VALUE=========================================================

pc=0xe1a0700c lr=  0x4a0398 sp=         0 fp=0x71764370

r0=0xffffffff r1=         0 r2=         0 r3=0xffffffff

r4=0xffffffff r5=0xffffffff r6=0x71764370 r7=0xffffffff

r8=0x716a3038 r9=  0x550000 r10=0xffffffff


REGS==========================================================[0]

pc=0xf765a41c lr=0xf75d574b sp=0xff847008 fp=0x12c04dc0

ip=       0x1 cpsr=0x600d0010


3. 터치 이벤트 관련


 예전에 터치 이벤트 관련하여 작업할때 만들어 뒀던 기능입니다. 사용자가 터치이벤트를 통해 어떠한 액션을 취한다거나, 특정 화면을 캡쳐하여 탈취할때 사용했었던 기능입니다.


 사용법은 다음과 같습니다.


root@zerofltektt:/data/local/tmp # ./mm -t a  

=> -t만 넣을 경우 메뉴가 뜨지 않습니다. 모니터링할 입력 이벤트를 설정해줘야 하는데 모르시면 아무거나 넣고 실행하시면 다음과 같은 화면이 나타납니다. 


[+]Touch event mode

[+]make temp directory : /data/local/tmp/mm_touch

****************************************************

[*] MM_TOUCH Copy Dir : /data/local/tmp/mm_touch

[*] Device Info Dir   : /proc/bus/input

****************************************************


- MENU

  1. Screen Capture (4.1.2 or less)

  2. Screen Capture for Security KeyPad (4.1.2 or less)

  3. Touch Coordinates Capture

  8. Select event (not yet)

  9. Exit


Select Number :



이벤트는 /proc/bus/input/devices 에서 확인 가능합니다. 


cat /proc/bus/input/devices


제 테스트 단말기의 터치 이벤트 정보는 다음과 같습니다. (펜으로 입력 시 이벤트가 다릅니다.)


I: Bus=0018 Vendor=0000 Product=0000 Version=0000

N: Name="sec_touchscreen"

P: Phys=sec_touchscreen/input1

S: Sysfs=/devices/14e10000.hsi2c/i2c-7/7-0049/input/input1

U: Uniq=

H: Handlers=event1

B: PROP=2

B: EV=2b

B: KEY=80 0 420 0 0 0 0 0

B: ABS=4a63800000000000

B: SW=8000


이벤트 대상을 넣고 실행하면 다음과 같이 나타납니다. 


root@zerofltektt:/data/local/tmp # ./mm -t /dev/input/event1

...


- MENU

  1. Screen Capture (4.1.2 or less)

  2. Screen Capture for Security KeyPad (4.1.2 or less)

  3. Touch Coordinates Capture

  8. Select event (not yet)

  9. Exit


Select Number : 3

[MM_TOUCH] Type : 0x3, Code : 0x39,     Value : 96

[MM_TOUCH] Type : 0x1, Code : 0x14a,    Value : 1

[MM_TOUCH] Type : 0x1, Code : 0x145,    Value : 1

[MM_TOUCH] Type : 0x3, Code : 0x35,     Value : 956

[MM_TOUCH] Set Code : Y

[MM_TOUCH] Type : 0x3, Code : 0x36,     Value : 2446

[MM_TOUCH] Set Code : X

[MM_TOUCH] Type : 0x3, Code : 0x30,     Value : 6

[MM_TOUCH] Type : 0x3, Code : 0x31,     Value : 6

[MM_TOUCH] Type : 0x0, Code : 0x0,      Value : 0

[MM_TOUCH] Type : 0x3, Code : 0x35,     Value : 953

[MM_TOUCH] Set Code : Y

[MM_TOUCH] Type : 0x3, Code : 0x36,     Value : 2448

[MM_TOUCH] Set Code : X

[MM_TOUCH] Type : 0x3, Code : 0x30,     Value : 7

[MM_TOUCH] Type : 0x3, Code : 0x31,     Value : 7

[MM_TOUCH] Type : 0x0, Code : 0x0,      Value : 0

[MM_TOUCH] Type : 0x3, Code : 0x35,     Value : 941

[MM_TOUCH] Set Code : Y

[MM_TOUCH] Type : 0x3, Code : 0x36,     Value : 2449



1,2 번은 화면 캡쳐기능입니다. 이미지 프레임 버퍼에서 데이터를 가져와 복원하는 방식이나, 4.x까지만 동작합니다.... 쓸일이 별로 없어서 그 뒤로 업데이트는 하지 않고 있습니다. 


3번을 선택하면 다음과 같이 화면을 터치하는 좌표들이 출력되며, 해당 정보는 /data/local/tmp/mm_touch 에 생성되며 다음과 같습니다.


root@zerofltektt:/data/local/tmp # cd mm_touch/

root@zerofltektt:/data/local/tmp/mm_touch # ls -al

-rw------- root     root          779 2018-04-04 09:52 position.log

at position.log

0:956

2446:956

2446:953

2448:953

2448:941

2449:941

2449:902

2461:902

2461:848

2486:848

2486:802

2526:802


해당 좌표 정보를 이용하여 사용자가 어떤 동작을 수행했는지(생성순서가 시간별), 어떠한 글을 썼고, 서명을 했고, 그림을 그렸는지 복원이 가능합니다.

memget windows용에 해당정보를 넣으면 이미지로 복원시켜주는 도구를 만들었었는데 어디간지 모르겠네요....나중에 찾으면 같이 올리도록 하겠습니다.


4. Class dump 관련


 말그대로 dex파일로부터 클래스 덤프하는 기능입니다. 공부겸 겸사겸사 만들어 봤던기능입니다. 


사용법은 간단합니다.


./mm -d [DEX FILE PATH]

ex) ./mm -d classes.dex


실행결과는 다음과 같습니다.


[+]Dex Class Dump mode

[+]make temp directory : /data/local/tmp/mm_dump

[+]Done


폴더에 결과를 확인하면 다음과 같습니다.


Lcom/e/a/a/b/a; <clinit>; Void; Void

Lcom/e/a/a/b/a; <init>; Void; Void

Lcom/e/a/a/b/a; inProgress; Float, Long, Int; Void

Lcom/e/a/a/b/a; onAfter; Int; Void

Lcom/e/a/a/b/a; onBefore; w, Int; Void

Lcom/e/a/a/b/a; onError; e, Exception, Int; Void

Lcom/e/a/a/b/a; onResponse; Object, Int; Void

Lcom/e/a/a/b/a; parseNetworkResponse; y, Int; Object

Lcom/e/a/a/b/a; validateReponse; y, Int; Bool

Lcom/e/a/a/b/b; <init>; Void; Void

Lcom/e/a/a/b/b; parseNetworkResponse; y, Int; Object

Lcom/e/a/a/b/b; parseNetworkResponse; y, Int; String

Lcom/aio/downloader/adapter/LastRequestListAdapter$MyStringCallback; <init>; LastRequestListAdapter, String, Long, String, Int, LastRequestListAdapter$ViewHolder; Void


기본출력값은 int, Bool 등으로 출력됩니다. 달빅형식으로 출력을 원하면 -d 옵션을 사용하면 됩니다.

Landroid/support/v7/app/e; a(I, Landroid/view/Menu;) V

Landroid/support/v7/app/e; a(Ljava/lang/CharSequence;) V

Landroid/support/v7/app/e; a(I, Landroid/view/KeyEvent;) Z

Landroid/support/v7/app/e; a(Landroid/view/KeyEvent;) Z

Landroid/support/v7/app/e; b( ) Landroid/view/MenuInflater;

Landroid/support/v7/app/e; b(Ljava/lang/CharSequence;) V

Landroid/support/v7/app/e; b(I, Landroid/view/Menu;) Z

Landroid/support/v7/app/e; c(Landroid/os/Bundle;) V

Landroid/support/v7/app/e; f( ) V

Landroid/support/v7/app/e; h( ) Z

Landroid/support/v7/app/e; k( ) V

Landroid/support/v7/app/e; l( ) Landroid/support/v7/app/ActionBar;

Landroid/support/v7/app/e; m( ) Landroid/content/Context;



Posted by Nvdark
,

다운로드는 https://unsigned.kr 에서 가능합니다.



- 모든 도구는 개발중, 또는 다수의 버그를 가지고 있습니다. 

- 시간이 없어 급한데로 필요한 기능만 구현하고 고치질 않고있습니다...귀차니즘이...참고하시면 될듯 합니다.


1. memget project

 - 윈도우용 취약점 점검 및 모의해킹용으로 업무를 수행하면서 필요했던 기능들을 넣어둔 도구입니다.


2. memget mobile for android

 - 안드로이드용 입니다.

 - 현재 풀버전[베타]을 공개해뒀으며, 버그가 있는 개발중인 버전입니다.


3. memget mobile for ios

 - 트윅입니다.

 - 탈옥탐지 우회를 위해 개발했습니다.



Posted by Nvdark
,

진짜 블로그 열심히 하시는분들은 대단한듯....귀찮아서 못해먹....



UI도 바꾸고, 전반적으로 다 뜯어고치고 싶은데....실력은 안되고.. ㅠㅠ 

그냥 그대로 계속 붙이다보니...지금은 좀 덩치가 커져서 다시만들 엄두가 안난다...


앞으로 업데이트 할때마다 업데이트 내역을 작성해봐야겠다... 안했더니...히스토리가 없다....


일단, 최근 작업내용 정리!!


- 마지막 작성글 기준 변경사항


 1. 버전 변경  

   => 1.8.16.58 -> 1.10.22.74 Build 7602



 2. 기능 추가 

  1) Network Config Viewer : 네트워크 장비에 대한 설정파일 뷰어

   - 사실 이것저것 보다보면 네트워크 장비의 설정파일을 보고 판단할일이 많다. 라우팅테이블부터, 보안관련 설정까지 등등... 설정파일이 한눈에 들어오지 않고, 많은 장비를 한번에 판단하기 위해 UI를 덮고 기능을 좀 추가해 봤다.

   - 로딩된 모든장비에서 원하는 문자열 검색 가능

   - IP, AccessList, Vlan등 추적 기능 (거창한건 아니고 어느장비에서 해당 IP등을 사용하는지 장비/인터페이스 등 별로 다 뽑아줌)



  2) Broxy : 브라우져 프록시

   - 이건 요세 작업중인건데 인터넷 뱅킹 등 점검하다보면 네트워크 프록시 점검 도구(피들러 등)나 메모리 점검, 개발자도구등을 사용할수 없도록 보안기능들이 동작한다. 매번 우회하는것도 힘들어서 만들어보았다.

   - 개발중이라 기본 기능만 구현했지만,  나중에 다양한 기능을 추가할 예정이다. 

   - 보안기능에 잡히지 않는다.

   - 내가 원하는기능을 구현하여 자동화가 가능할 듯하다. 




  3) Cryto

   - 인코더, 디코더, 암복호화 등 쓸때마다 인터넷에서 검색하고, 인터넷안되면 받아둔 프로그램으로 돌리는데 그것도 오류나면 답이없다...그래서 만들어보았다...

   - SEED, AES, MD5, SHA0~SHA512 지원

   - 인디코더는 추가중(현재 HEX, ASCII, BASE64 가능)

   - 추가 필요하면 넣으면 될듯




  4) File Format Extractor

   - 그냥 메모리나, 파일등에 있는 파일 찾아내는 기능이다.

   - 점검하다가 이미지를 찾을일이 있었고, 그래서 만들었다...

  

  5) Android Connect

   - 이건 순전히 편의 기능이다.

   - 스샷찍으면 파일을 일일이 빼와야 하는게 귀찮아서, 자동으로 해주는 걸 만들었고,

   - adb접속도 가능하며, 자주사용하는 점검도구 자동 설치기능을 제공한다.

  

  6) 기타 기존 기능 업데이트

   - 기타 기존에 있던 기능들 업데이트 및 버그 수정등 ....많이 했다....



항상 느끼는거지만, 그때그때 필요해서 급하게 만들다보니, 오류나 버그는 신경안쓰고 기능구현에만 집중한다....그래서...쓰다보면 버그가 엄청나다... ㅠㅠ


사실 안드로이드, iOS버전도 업데이트가 많이 되었고, 기능추가도 많이 되었다...


이제부터 좀 착실히 정리를 해놔야겠다...

 


  

Posted by Nvdark
,