首页
社区
课程
招聘
[求助][求助]跪求大家帮忙看下这个程序如何破壳
发表于: 2016-6-28 09:31 14471

[求助][求助]跪求大家帮忙看下这个程序如何破壳

2016-6-28 09:31
14471
大家好!小弟刚开始学习逆向知识,在脱壳一个sdk时遇到问题,希望大家帮忙看一下,谢谢!
附件中是该sdk的demo:
程序启动时,加载libmgpbase.so库,此库会去加载assets下的libmgp_03.00.00_00.so库。这个库就会解密MiguPay.Sdk.Lib_12001000_7726499C7809A6CFCD562A02EE7FF680.dat文件并还原后动态加载,该文件是核心的dex。
根据小弟几天来的学习,有以下几点收获:
1.通过gcore线程的方式可以dump出还原后的dex(但无法直接加载,可能是不完整)。
2.该sdk也是3个进程相互ptrace。
3.通过ida动态调试,没有调用dvmDexFileOpenPartial。
4.dex和so都是加密的,无法静态分析
5.attach主进程后,直接退出

目前小弟研究两周,仍未破壳,实属无赖才发帖求助!希望大家帮忙研究一下,能够提供一点思路!再次感谢!
补充:小弟把已经dump出的dex上传了,附件是:31475776.zip

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 63
活跃值: (464)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
给你顶一下,我IDA附加被检测到APP直接退出了。
2016-6-30 10:27
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
嗯,多谢兄弟帮顶!我也是在运行期附着就退出了。

我将demo.apk改成debug模式运行,可以动态调试,但当它加载了它自己的so后就退出了。
之前尝试在fopen打断点,看它是否通过读取/proc/pid/status的traceid来检测的。但是发现并没有调用该函数。
昨天又尝试了看是否是通过获取系统时间,检测时间差,它确实在JNI_Onload中调用了gettimeofday,应该是这种方式检测并退出的。还在跟进中...
2016-6-30 10:40
0
雪    币: 63
活跃值: (464)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
将demo.apk改成debug模式运行是啥意思,不懂。
如果你说的通过gettimeofday获取时间判断检测的话建议在这个函数下下个断跑起来看是否有二次调用来确定,不然的话只能从代码入手慢慢分析了。
2016-6-30 11:02
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
就是将demo.apk里的AndroidManifest.xml文件添加了android:debuggable="true"属性,然后用adb shell am start -D方式运行,此时进程就是等待调试状态,然后就可以用ida进行调试了(不过在它执行JNI_OnLoad中时还是会退出)。
我在gettimeofday下了断点,会被调用多次,应该是检测了多次。
2016-6-30 11:12
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
不能hook fopen吗,或者在libc.so fopen函数下断点,发现在读那个文件就跟进去,
或者就算再再牛逼的反调试,就算他一万个进程,你用启动调试,或者ida勾选那个加载so的时候就断下来,不行吗,他的反调试进程都没有跑起来又怎么可以反调试你呢
2016-6-30 12:44
0
雪    币: 63
活跃值: (464)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
你说的这个方法我知道,我的IDA退出应该是被他的检测机制检测到了反应。
IDA调试蛋疼的就是不能像OD那样修改它代码,不然你就不用那么麻烦了
2016-6-30 12:45
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
谁说不能修改啊
2016-6-30 12:49
0
雪    币: 63
活跃值: (464)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
我操,一直以为不行,求教训!!!
2016-6-30 12:56
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
可以调试的,现在就是在它加载so时,执行JNI_OnLoad里,退出了程序,而且也进了exit函数,我在它执行exit之前,把这句nop掉了,不过它又重新执行到这里来了,应该是有多次检测,代码有点复杂,目前还在分析它的逻辑代码呢。
2016-6-30 13:25
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
可以修改它的代码,在Hex View窗口中,找到有修改的位置,按F2,修改完了再按F2就完成了
2016-6-30 13:26
0
雪    币: 63
活跃值: (464)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
原来如此,明白了,感谢指导。
16进制修改还是不如OD
2016-6-30 14:22
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
嗯,不客气!我也是刚学的,大家互相交流
2016-6-30 15:12
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
兄弟,你好,看到麻烦回复一下,你还有脱这个壳不?
2016-7-6 18:00
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
嗯,还需要脱这个壳的!
2016-7-8 08:59
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我也一直在研究这个,已经找到了CustomProvider里的native函数了,也是因为调试不了,所以没法进行下去了
2016-7-12 21:57
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
嗯,在尝试过它的反调试时,发现在JNI_OnLoad里检测机制和正常逻辑是揉在一起的,然后各种switch case,很多处检测,改了它退出的位置后,逻辑就不正常执行了。
2016-7-17 13:55
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
兄弟,能留个联系方式不?我也在研究这个
2016-7-19 17:39
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
QQ:306318372 我也在研究这个,大家一起交流
2016-9-7 12:44
0
雪    币: 4230
活跃值: (1435)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
20
用keypatch吧,这个今年IDA Pro Plugin Contest第三名。
http://blog.csdn.net/fjh658/article/details/52268907
2016-9-26 22:20
0
游客
登录 | 注册 方可回帖
返回