前言

最近把研究dex的脱壳,顺便又是再次熟悉了一下dex的标准格式以及dex被解析后在内存中所存在的格式。自己上官网加了一个壳子,发现跑不起来。于是求助几个基友,最后样本是海总给的apk,很全面,带有Activity、Application、BroadcastReceiver、ContentProvider、以及Service。

0x1 加壳前后对比

加固后的文件列表变化:
新增一个so文件以及一个jar包:
libbaiduprotect.so
baiduprotect.jar
修改:
META-INF文件夹
AndroidManifest.xml
Classes.dex

0x2 IDA尝试

用IDA来远程调试,直接跑挂了。看来有反调试。
从壳入口Java层找到如下语句:

 static {if(!Debug.isDebuggerConnected()) {String v0 = Build.CPU_ABI;if(v0 != null && (v0.startsWith("x86"))) {StubApplication.loadX86Library();return;}System.loadLibrary("baiduprotect");}
}

把第一个if删掉之后,程序顺利的加载了baiduprotect.so,顺利的进入了壳的领空,不过不知道是程序在so里面做了完整性校验还是再次检测了debuggerconnected,每次跑都是进入了一个死循环后,然后程序就跑挂了,跑了很多次都是难以逃出那个trap。这个时候就比较纠结了。既然反调试过不去,想起360的壳子用DD也可以脱的很完美,那就换个方式试试。

0x3 DD大法

dd if=/proc/PID/mem of=XX skip=0 ibs=1 count=LENGTH
skip改成偏移地址
偏移地址
cat /proc/pid/maps

1.这里首先要感谢下wbyang博士猛男,这个DD大法也是上次挑战赛之后向他学来的。程序跑起来,把内存都dump出来,大概是100多mb的东西。找几个字符串,然后向上翻,找到dex文件的头,发现是被抹掉的。如图:

前面红色框的8字节是odex的magic头。后面的0x70字节是dex的头。除了一些size和编码标志没有被抹掉,其他的已经是面目全非,修复后如下:

这下把dex文件抠出来了。
2.把dex反编译成smali文件
出现如下错误:

反复检查后发现了如下是CodeItems下面的offset错误:

Dex的文件大小才0xA30DC,而offset指向了外面的东西。当然是无法解析的,这里我是有一个问题的,第三个偏移,这个0x0220E8E8,指向的是前面的内存,这是如何做到的?我个人认为是百度是在加载完成之后故意改成这个数字的。若有错误,还望前辈不吝指正。
把这三个offset 都改成0就可以达到反编译成功,当然是在缺三个DataItem的前提下编译成功的。找到被抹掉的DataItem地址:

以上三处为0的区域就是加固前的dex代码所存放的位置。
因此,假设我们能从dex的结构逆推出该三处的数据并且用应该的数据填充这块,静态就能把这个壳子搞定了。
3.如何修复

360壳子要修复的数据为DataclassDef中的offset即可。而百度的更为麻烦一些,不仅它的偏移需要修复一下,更为麻烦的是DataItem的数据也要修复。这个难度就更大了。
总的修复原则是导出函数表,然后按顺序来修复dex中被抹掉的数据,如下:

逆计算出函数的uleb128的索引值、常见函数的一些accessflags、以及指向函数内容的offset。
修复后如下:

修复的过程比较繁琐,有时候还需要自己尝试几次才知道size是多少。所以叫它人肉修复好了。
修复好了反编译如图

发现onCreate函数没有代码,检查了一下,又有新发现!

原来是oncreate中的insns[]也被抹掉了。这个算是最基本的单位了,功力太弱,无法逆推。

最后总结下,百度的壳子需要修复dex头中的magic、签名值、校验值以及各个offset。还需要修复Dataclassoffset,以及Dataclass和opcodes。前两者是可以静态修复的,最后的只能动态调试寻找了。百度壳子新增了一个oncreate001的函数,调用的壳中的d方法以及e方法,猜测是d方法填充了insns[]解密数据,然后e方法为清洁工,抹去正确的数据或者是改成一些非法数据。此时就泪奔了。。(心里暗想:百度好猥琐啊。。。)

由于过去几天了,再次写文章又重新做了一遍,把各种东西找好,写完花了将近三个小时,累觉不爱了。。。T T

由于水平有限,难免有错误,还望各位看官不吝指正。
2015.3.24 By Ericky

百度脱壳的一点尝试--人肉修复相关推荐

  1. vSAN一次人肉工程师踩过的坑

    vSAN一次人肉工程师踩过的坑 原创 李严省 虚实之路 2017-04-16 大家星期天好,这几天阳光不错,是个带家人或者女朋友出去转转的好时候.可惜这二天一夜做了VMwarevSAN人肉工程师,这二 ...

  2. 网购发展迅猛 购物网站进入“人肉营销”时代

    据淘宝网近日发布的数据,10月9日当天,该网站单日交易额达到6.26亿元人民币,这一数据几乎和香港特区政府最新公布的今年8月香港平均每日零售总额6.44亿元人民币相当.网络购物正以常人难以想象的速度迅 ...

  3. “人肉代购”:靠什么在夹缝中生存?

    "情人节送女友礼物清单已出,别再犹豫,快选一款取悦你的她.""2月中旬飞韩国,需要下单的宝宝提前说."这熟悉的语句,正是"人肉代购"们在朋友 ...

  4. 人肉云-【软件和信息服务】2014.02

    提到曾经红火一时的"人肉搜索",大家肯定历历在目,很多知名的人肉搜索事件让我们见证了她的威力.你轻问度娘就可以例数人肉搜索为我们留下的很多经典案例,虽然人肉搜索被很多人诟病,但是她 ...

  5. 有钱可以多任性?OpenAI提出人肉模型训练,文本摘要全面超越人类表现!

    文 | 小轶 背景 三个多月前,OpenAI的GPT-3在NLP界掀起轩然大波.就在上周,视金钱如粪土的OpenAI团队又在文本摘要方面推出了最新力作,全方位超越人类表现.其亮点在于:以人类偏好替代自 ...

  6. 人肉搜索酝酿灰色产业:首批淘客月入万元

    对于人口迅速向70亿迈近的地球来说,"六度分离"理论是一个令人难以置信的理论.所谓"六度分离",是说世界上任何两人之间最多通过6个人就能联系起来.这看起来非常奇 ...

  7. 卡巴斯基和Endtab.org开设新课程教授用户如何防范人肉搜索

    从去年开始,我们的生活基本上都转移到了数字世界,因此,确保我们的数字空间的安全变得比以往任何时候都重要.认识到在线隐私的重要性导致了以隐私为中心的产品的增长,但仍然有许多人对个人数据的暴露可能导致的危 ...

  8. “知乎女神”诈骗被人肉,一场个人隐私权与网络监督权的博弈

    近日,关于"知乎女神诈骗案"的消息吸引了众多网友的关注.在知乎网友集体举报后,疑似当事人童某又发布帖文,就自己的行为致歉,并称自己正准备和父母一起去公安局自首.并表示,对于诈骗的钱 ...

  9. 人肉搜索:网络隐私权的侵犯与保护

    "如果你爱他,把他放到人肉引擎上去,你很快就会知道他的一切:如果你恨他,把他放到人肉引擎上去,因为那里是地狱--"最近,这种网络上的"人肉搜索"将互联网搅得风生 ...

最新文章

  1. 计算机学院杨洋,美国莱特州立大学吴志强教授访问计算机科学与技术学院
  2. 前前前世用计算机,前前前世
  3. Android---自定义Toast
  4. int** 赋值_Python的赋值、浅拷贝、深拷贝之间的区别
  5. FastDFS的介绍
  6. Java编辑环境搭建
  7. mysql基本语法 外键_Mysql基本语法一
  8. APP_FIELD设置Item运行时行为
  9. JSONObject.toBean方法复制不成功
  10. C语言关键字必备练习题
  11. python将文本文件加密后输出_【Python】python文件或文本加密(4种方法)
  12. Word转为PDF,并在线预览。
  13. 浅析凸优化理论学习中的“坑”
  14. 【Python】pandas的read_csv参数简略概括(header,path),DataFrame的返回值describe,plot,head
  15. 360无线wifi路由器连接到服务器,两个360路由器如何并连 两个无线路由器桥接设置方法...
  16. Java-TreeSet与Comparable的详讲与实现
  17. 【BZOJ4522】密匙破解(Pollard_rho)
  18. AUTOSAR——MBD应用之NM模块Stateflow实现
  19. rocketmq-常见问题总结(基本概念、高可用、中间件选型)
  20. 人造金刚石 量子计算机,金刚石并非坚不可摧:科研小组创造首个量子计算机桥...

热门文章

  1. Java小农养成记第四天
  2. 高等数学期末总复习 DAY 2.判断间断点类型 零点、
  3. 数学论文(优化方向)写作总结
  4. 行业标准是什么,怎么申请?
  5. 快速入门CSS || 干货 自整语句大全
  6. Python Spider: 爬取项目外包网站TaskCity
  7. 深入浅出JVM内存模型+垃圾回收算法
  8. python绕过付费认正_python接口自动化三(登录绕开验证码及发帖)
  9. DataGrip的简单设置及使用
  10. Webshell Bypass