吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 33761|回复: 40
收起左侧

[Android 原创] 通过ida dump Uinity3D的加密dll

  [复制链接]
xiaobaiyey 发表于 2015-8-9 12:32
本帖最后由 Mr白白小武 于 2015-8-9 12:51 编辑

看了一篇文章:http://www.jianshu.com/p/5bba57045b09

通过hook解密Uinity3D的加密dll,最近刚接触动态,于是就尝试了下能不能通过IDA,像脱壳一样,dump出解密的dll文件,试了下,果然可以,在这里分享下

工具:ida6.6 小米2s  青龙*月刀(随便找的一款游戏)


解压app lib文件夹下的libmono.so ,拖入ida

主要还是在这个几个函数上下断点(可以参考mono的源码)

mono_image_open_from_data_full
mono_image_open_from_data
mono_image_open_from_data_with_name

解密个过程可能在这几个函数的左右

查看前面函数最终调用的还是mono_image_open_from_data_with_name,

动态调试:如果app有反调试,还需要跳过饭调试,下面简单介绍动态调试的准备工作(网上有很多动态调试教程)

推送android_server到手机
1:adb push  android_server /data/local/tmp/
2.:adb shell
3.cd /data/data/tmp/
4.chmod 777 android_server
5../android_server
端口转发:adb forward tcp:23946 tcp:23946
debug启动app
adb shell am start -D -n com.huiguan.qinglong.taiqi.dl/com.huiguan.qlyyd.UnityPlayerNativeActivity
查看此app PID
adb shell
ps |grep dl
记录下PID并转发下
adb forward tcp:8700 jdwp:PID
设置ida 并打开attach 上进程,
运行app
这个时候在cmd窗口上运行jdb调试:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
这个时候可以调试了


运行app会断在linker上

1.png

接着如果app没有反调戏:直接f9运行
出现下面这个窗口:点same

2.png

稍等片刻,还会端在linker上,直接f9运行

如果出现这个窗口,全部选择yes(pass to app)不用等待了

3.png

后面可能会出现很多这个窗口全部选择yes 然后f9运行

最终断在mono_image_open_from_data_with_name,方法上

首次加载并非我们想要的dll直接跳过,

下图断点关键函数上

4.png

如果看不懂可以 f5 看下源码,这里直接f5 源码演示,他这里重写了momo的源码

int __fastcall mono_image_open_from_data_with_name(int a1, char *haystack, int a3, int a4, char a5, char *haystacka)

几个关键性参数

//nt a1 读取dll文件偏移地址

// char *haystack ,dll文件的大小

// char *haystacka ,文件名称

34.png

这个时候跟随R1寄存器看到加密的dll文件的地址,说明dll还没开始解密,解密可能会在后面。单步向下走并注意各个寄存器的变化,经过一个简单的循环

将dll解密了这个时候dll就在内存中解密了,

83.png

这个时候已经可以dump了,

查看寄存器窗口:找到R6和R11

整个文件偏移的开始R6=7B95304C

偏移地址的结束R6+R11=7B95304C+3AF200=7BD0224C

使用;dump dex的脚本

auto fp, dexAddress;
     fp = fopen(“D:\\test.dll”, “wb”);
    for ( dexAddress=0x7B95304C; dexAddress < 0x7BD0224C; dexAddress++ )
    fputc(Byte(dexAddress), fp);


run下就ok了

解密出来的效果,个人博客:xiaobaiyey.com

1111.png

附上:原dll和解密dll

http://pan.baidu.com/s/1c4P6Q




点评

楼主能搞出脱壳机吗?这样操作好麻烦.  发表于 2015-8-13 16:42

免费评分

参与人数 14热心值 +14 收起 理由
970883246 + 1 DUMP的DLL修改保存不了,没啥用
Amanda小黑 + 1 谢谢@Thanks!
唯殇啊 + 1 楼主求个详细 小白教程啊
周卫国 + 1 谢谢@Thanks!
yuluo5566 + 1 谢谢@Thanks!
peterdocter + 1 楼主是实战型
梁小凉 + 1 我很赞同!
peter_king + 1 谢谢@Thanks!
fenghaoda + 1 我很赞同!
royoko + 1 我很赞同!
xx1055106557 + 1 谢谢@Thanks!
spguangz + 1 小白new bee
逍遥枷锁 + 1 谢谢@Thanks!
Free-Man + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| xiaobaiyey 发表于 2015-8-12 03:35
本帖最后由 Mr白白小武 于 2015-8-12 03:39 编辑
Chago 发表于 2015-8-11 23:24
这样好像dump不全所有dll,hook了mono_image_open_from_data_full、mono_image_open_from_data、mono_image ...

提供了 一个可行的思路,至少加密的dll应该没多大问题 当然用
libsubtrate.so可能方便点,还有就是很多dll都是这mono_image_open_from_data_with_name这个过程解密的的,也就是说,可能拿到的地址,是未解密的
Chago 发表于 2015-8-11 23:24
这样好像dump不全所有dll,hook了mono_image_open_from_data_full、mono_image_open_from_data、mono_image_open_from_data_with_name把地址长度打印出来,过滤一下,再从内存dd出来dll可能会dump得全的一点
微博2016 发表于 2015-8-9 12:36
羅少 发表于 2015-8-9 12:56
前排围观。 出售瓜子矿泉水
K?☆mㄚì天 发表于 2015-8-9 13:06
精华帖 就进来看看~~
盈盈一水间cc 发表于 2015-8-9 13:20
很详细,给力
亿联网络 发表于 2015-8-9 13:28
不错,思路很好啊
lifi 发表于 2015-8-9 13:29
前排路过→_→
NCK 发表于 2015-8-9 14:59

前排路过→_→
谁的无聊中 发表于 2015-8-9 15:06
谢谢前辈,学习一下吧~~~
xx1055106557 发表于 2015-8-9 16:31
虽然看不懂,但是还是感觉好厉害
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 17:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表