首页
社区
课程
招聘
[原创]2015移动安全挑战赛第二题
2015-1-25 20:10 1961

[原创]2015移动安全挑战赛第二题

2015-1-25 20:10
1961
第二题作了反调试处理,首先得把反调试的代码处理掉。使应用以debug方式启动,等待附加调试:
adb shell am start -D -n com.yaotong.crackme/.MainActivity
然后用ida附加调试,在JNI_OnLoad处断点,单步调试,找到反调试的函数跳转指令(红色高亮部分):
.text:00001B9C                 EXPORT JNI_OnLoad
.text:00001B9C JNI_OnLoad
.......
.text:00001C28 loc_1C28                                ; CODE XREF: JNI_OnLoad+30j
.text:00001C28                 SUB     R5, SP, #8
.text:00001C2C                 MOV     SP, R5
.text:00001C30                 LDR     R0, =(_GLOBAL_OFFSET_TABLE_ - 0x1C48)
.text:00001C34                 LDR     R1, =(sub_16A4 - 0x5FBC)
.text:00001C38                 MOV     R3, #0
.text:00001C3C                 STR     R8, [R5]
.text:00001C40                 ADD     R0, PC, R0 ; _GLOBAL_OFFSET_TABLE_
.text:00001C44                 ADD     R2, R1, R0 ; sub_16A4
.text:00001C48                 ADD     R0, R9, R0
.text:00001C4C                 MOV     R1, #0          ; name
.text:00001C50                 LDR     R7, [R0,#0x24]
.text:00001C54                 SUB     R0, R11, #-handle ; handle
.text:00001C58                 BLX     R7 ; __imp_dlsym
.text:00001C5C                 BL      sub_17F4
.text:00001C60                 LDR     R0, [R4]
.text:00001C64                 MOV     R6, #4
.text:00001C68                 MOV     R1, R5
.text:00001C6C                 ORR     R6, R6, #0x10000
.text:00001C70                 MOV     R2, R6
.text:00001C74                 LDR     R3, [R0,#0x18]
.text:00001C78                 MOV     R0, R4
.text:00001C7C                 BLX     R3 ; __imp___aeabi_memset
.text:00001C80                 CMP     R0, #0
.text:00001C84                 MOVNE   R6, #0xFFFFFFFF
.text:00001C88                 MOV     R0, R6
.text:00001C8C                 SUB     SP, R11, #0x18
.text:00001C90                 LDMFD   SP!, {R4-R9,R11,PC}
.text:00001C90 ; End of function JNI_OnLoad
然后用16进制编辑器将其改为空指令或者别的作用相同的指令,实际上我把他改成了
mov r0, r0 #0000A0E1
效果一样,然后重新打包运行,就可以直接附加调试了,后面就是调试并且查看答案变量值。
.text:000011A8                 EXPORT Java_com_yaotong_crackme_MainActivity_securityCheck
.text:000011A8 Java_com_yaotong_crackme_MainActivity_securityCheck
.......
.text:000012A0                 LDR     R1, =(off_628C - 0x5FBC)
.text:000012A4                 LDR     R2, [R1,R7] ; off_628C
.text:000012A8
.text:000012A8 loc_12A8                                ; CODE XREF: Java_com_yaotong_crackme_MainActivity_securityCheck+120j
.text:000012A8                 LDRB    R3, [R2]
.text:000012AC                 LDRB    R1, [R0]
.text:000012B0                 CMP     R3, R1
.text:000012B4                 BNE     loc_12D0
.text:000012B8                 ADD     R2, R2, #1
.text:000012BC                 ADD     R0, R0, #1
.text:000012C0                 MOV     R1, #1
.text:000012C4                 CMP     R3, #0
.text:000012C8                 BNE     loc_12A8
.text:000012CC                 B       loc_12D4
..........
.text:000012DC ; End of function Java_com_yaotong_crackme_MainActivity_securityCheck

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回