首页
社区
课程
招聘
大神cm逆向题-解题步骤
发表于: 2016-1-7 18:35 10507

大神cm逆向题-解题步骤

2016-1-7 18:35
10507

最近再学习so逆向,前天某大神出了个CM,正好当学习。下面是我的解题步骤,解法比较基础,大牛自行略过。题目链接:http://bbs.pediy.com/showthread.php?t=206967

1.  拖入jeb里,查看java层代码

核心代码在此,输入字符串,然后调用jni函数EatRice()。
2.导入so到IDA中,查看EatRice()函数代码。

从这里可以看出输入的位数为7位,前两位已经给出。分别是ascii码为88和35。也就是X和#字符。
伪c代码效果不是很好,汇编视图显示的代码要全些。但是发现两大断的汇编没有联系在一起。不知道咋弄了,于是就动态调试so。
3.下面IDA动态调式so。
在EatRice()函数设置断点。

这个时候tab键,就可以看到比较全的伪c代码了。(结合汇编看感觉好些)
这个函数里面写了几个算法,分别求出输入字符串的各位。下面一位一位的求。之前前面2位已经知道了。

第3位对应核心算法:

对应解法:

求出第三位ascii码为121,即y字符。当然这里计算器算也行的。

第4位对应核心算法:

对应解法:

这里a4值是根据下面算出:

后面的有的也要根据上面的算法进行计算,下面就不贴了。
最终求得c4=42,即就是*字符。

第5位对应核心算法:

对应解法:
这个手算的,就不贴代码了。结果C5=56,也就是字符8.

第6位对应核心算法:

这个也是手算,结果C6=64,也就是@字符。

第7位对应核心算法:

对应解法:


求出C7=76,也就是L字符。
最终结果就是:X#y*8@L


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 3
支持
分享
最新回复 (14)
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
2
厉害,顶一个!
2016-1-7 19:17
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
静态分析那个so,总找不到关键函数在哪,ida只显示jumpout。。多谢楼主思路,也多谢雨神的CM~~
2016-1-7 20:53
0
雪    币: 98
活跃值: (364)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
所以我动态调试的
2016-1-7 21:03
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
5
其实是可以静态分析的,主要是自动识别的时候将malloc函数当成trunk了。手动将malloc、sleep等分析成函数(记得去掉noreturn属性,不要自动识别成的代码片断),这样F5就正常了。
.text:000028C4
.text:000028C4 ; int __fastcall malloc_(int)
.text:000028C4 malloc_                                 ; CODE XREF: Java_by_Ericky_crackme01_JNI_EatRice+46p
.text:000028C4                                         ; GetStringUTFChars:loc_113Cp
.text:000028C4                 BX      PC
.text:000028C4 ; ---------------------------------------------------------------------------
.text:000028C6                 ALIGN 4
.text:000028C6 ; End of function malloc_
.text:000028C6
.text:000028C8                 CODE32
.text:000028C8
.text:000028C8 ; =============== S U B R O U T I N E =======================================
.text:000028C8
.text:000028C8
.text:000028C8 __32malloc_                             ; CODE XREF: malloc_j
.text:000028C8                 LDR     R12, =(malloc - 0x28D4)
.text:000028CC                 ADD     PC, R12, PC ; malloc
.text:000028CC ; End of function __32malloc_
.text:000028CC
2016-1-8 10:04
0
雪    币: 4522
活跃值: (2146)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
厉害学习了
2016-1-8 10:14
0
雪    币: 1140
活跃值: (4217)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
7
感谢楼主
不过我的IDA F5之后怎么不能显示核心代码  比如第三位的  请楼主指点下  谢谢
2016-1-8 10:17
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
8
惊现大神,懂了,以前没有静态改过程序逻辑,修改下把malloc nop掉也可以,其实不太明白hawking说的手动改malloc成函数以及去掉noreturn属性是个什么鬼
2016-1-8 10:28
0
雪    币: 98
活跃值: (364)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
好多大神...............
2016-1-8 10:50
0
雪    币: 4522
活跃值: (2146)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
能详细说下怎么改嘛
2016-1-8 15:08
0
雪    币: 110
活跃值: (254)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
选中 CHUNK
Edit->Functions->Remove Function tail

qq交流群:456853837
2016-1-8 15:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢楼主,学习了
2016-1-8 17:48
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
13
是的,静态是完全可以分析的。静态+手算都行,我出题的思路是猜,从java层每传入128个字符就能得出一位数,如果以前有积累的话,一下就能猜出来。我猜你是这么做的@AJISky
2016-1-8 19:01
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
"但是发现两大断的汇编没有联系在一起。不知道咋弄了,于是就动态调试so。"

看了很受启发,憋了好久终于做了出来,膜拜大神~
2016-1-30 12:12
0
雪    币: 2
活跃值: (44)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
15
我在用IDA动态调试的时候为啥没出现汇编代码,有点奇怪,手机已经root,都是按调试操作来的,有人遇到这种情况吗?怎么解决
2018-12-20 16:16
0
游客
登录 | 注册 方可回帖
返回
//