首先反编译dex文件,dex2jar、JD-GUI都能正常。定位关键代码
逻辑很清晰,public native boolean securityCheck(String paramString); 返回true即可。剩下的工作就是逆向so
打开IDA,反编译so,F5查看c代码
逻辑是输入和off_5A66E28C处的字符串一致即可。先看一眼静态数据:
.data:5A66E28C off_5A66E28C DCD aWojiushidaan ; DATA XREF: Java_com_yaotong_crackme_MainActivity_securityCheck+FCr
.data:5A66E28C ; .text:off_5A669308o
.data:5A66E28C ; .data ends ; "wojiushidaan"
难道是“wojiushidaan”,尝试一下果然不对。这块区域在动态执行过程中改变了。
准备IDA调试so,查看动态内存。结果发现IDA无法调试,应该反调了。
尝试静态干看,发现乱七八糟的代码太多,不想在第二题上浪费太多时间,所以采用查看动态内存的思路。
我的做法是通过010Editor 修改so文件,修改其代码,利用__android_log_print将其打印出来,这样是比较快的。
主要修改如下部分的代码
.text:0000129C BLX R3 ; GetStringUTFChars
.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+120 j
.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
在000012A4处,需要对比的密文存储于R2,所以思路是修改000012A8处的指令为:
.text:000012A8 MOV R0, #4
.text:000012AC MOV R1, R2
.text:000012B0 BL __android_log_print
打开010Editor,修改如下。其中BL的指令需要重新计算一些偏移。
最终获取log如下:
答案就是:aiyou,bucuoo
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)