windows 용으로 포팅한 zlib입니다. 

zlib-x86..zip

visual studio 2010 에서 테스트 하였습니다.

zconf.h 와 zlib.h 을 프로젝트에 추가한 후,

소스에 zlib.h을 include합니다.

라이브러리를 추가 종속성에 추가해 주세요.

 

빌드 시 아래와 같이 에러가 나는 경우, 특정 기본 라이브러리 무시에서 libcmt.lib을 입력해 주세요.

 

 

ADB Shell에 연결하여 작업하다 보면 불편한 점이 한두개가 아닙니다. vi는 원활하지 않고, 데이터를 폰에 넣으려면 adb push 를 입력해야 한다던지.. 여러모로 불편한 사항이 많습니다.

그러나 SSH 서버 앱을 설치하면 PC에서 바로 Putty 등을 이용해 ADB 없이 폰에 접속할 수 있습니다.

(마치 리눅스 서버에 접속하듯이 말이죠)

우선 스토어에서 SSH 서버 앱을 다운받습니다.

추천 앱 : Rooted SSH / SFTP 데몬

 

설정에서 아이디와 패스워드를 설정하면 끝입니다.

파일 업/다운로드는 SFTP 를 이용하면 됩니다.

추천 프로그램 : WinSCP

 

 

 터미널은 기존에 사용하시던 것 사용하시면 됩니다.

 

ARM에서의 조건 분기에 대해 알아보기 위해 아래와 같은 소스를 컴파일하여 실행하였습니다.

바이너리를 IDA에 넣고 디스어셈블링하였습니다.

strcmp 로 문자열을 비교해서 같으면 플래그가 0으로 설정됩니다.

BNE는 Branch Not Equal 로 같지 않으면 분기하라는 의미인데 0x852C를 보면 wrong이 있습니다.

주목해볼만한 것은 인텔 아키텍쳐와는 다르게 바이트 단위가 아닌 줄 단위로 분기한다는 것입니다.

이것은 4바이트 단위로 해석하는 arm-mode 특성 때문에 가능한 것이지요. 개인적으로 정말 마음에 듭니다.

무조건 right 이 출력되게 아래와 같이 코드 패칭을 하였습니다.

해당 라인에 NOP를 의미하는 0x90(2021.1.28 수정 : arm에서의 nop는 0x00 0xf0 0x20 0xe3입니다.)을 채워넣었습니다. 패치 후에 해당 부분이 정상적으로 디스어셈블링이 되지 않았습니다.

(gdb) break *0x8510       
Breakpoint 1 at 0x8510
(gdb) r
Starting program: /data/local/s/a.out
input password : wwwww

Breakpoint 1, 0x00008510 in main ()
(gdb) set *0x8514 = 0x90909090

0x00008514 <+244>:   90 90 90 90     umullsls        r9, r0, r0, r0   <--- NOP

(gdb) c
Continuing.
right!
[Inferior 1 (process 10098) exited with code 012]

잘 동작 합니다.



+ Recent posts