-
-
[原创]2015移动安全挑战赛第二题
-
发表于: 2015-1-25 20:10 2023
-
第二题作了反调试处理,首先得把反调试的代码处理掉。使应用以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
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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
看原图
赞赏
雪币:
留言: