首页
社区
课程
招聘
[原创]梆梆加固破解,另谈android安全的未来
发表于: 2014-7-10 04:56 46916

[原创]梆梆加固破解,另谈android安全的未来

2014-7-10 04:56
46916
先从上年的帖子说起:
http://bbs.pediy.com/showthread.php?t=174092
     上年时,android下的程序在安全方面还是很粗犷,能把核心写在so里,并加点花指令和"长城代码"已算是不错了,但今年有感于android安全方面越趋成熟,已经快和PC下的加密技术不相上下,而相应的逆向方面却举步维艰,"魔高一尺道高一丈"呀.
    言归正传,现在专业加密方面做得比较好的,应该还是爱加密和梆梆加固,尤其梆梆加固,现在最新的陌陌(5.0)都是梆梆加固了.这个过亿级用户的公司都用了,不得不说是一个很重要的信号.如果以后程序都使用类似的技术,则android逆向方面就无法再进行(安全公司的应该首当其冲),所以希望推进这方面的研究.

之前网上传的梆梆加固的破解方法,现在已经失效,gdb attach子线程直接退出,根本gcore不出任何有价值的东西.

现在还暂时找不出直接拿到dex的方法,所以初步想从libsecexe.so入手.现把已经分析的资料分享出来.
ELF文件信息
ELF Header:
  Entry point address:               0x3850

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  *** Align
  EXIDX          0x024e08 0x00024e08 0x00024e08 0x004c0 0x004c0 R   0x4
  LOAD           0x000000 0x00000000 0x00000000 0x11644 0x11644 R E 0x8000
  LOAD           0x018cac 0x00028cac 0x00028cac 0x00364 0x01210 RW  0x8000
  DYNAMIC        0x018d10 0x00028d10 0x00028d10 0x00108 0x00108 RW  0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
  GNU_RELRO      0x018cac 0x00028cac 0x00028cac 0x00354 0x00354 R   0x1

Dynamic section at offset 0x18d10 contains 29 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [liblog.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so]
 0x00000001 (NEEDED)                     Shared library: [libm.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libdl.so]
 0x0000000e (SONAME)                     Library soname: [libsecexe.so]
 0x00000010 (SYMBOLIC)                   0x0
 0x0000000c (INIT)                       0x10a01
 0x00000019 (INIT_ARRAY)                 0x28cac
 0x0000001b (INIT_ARRAYSZ)               8 (bytes)
 0x0000001a (FINI_ARRAY)                 0x28cb4
 0x0000001c (FINI_ARRAYSZ)               12 (bytes)


头指定的程序入口是0x3850,但真正的重要处理在是在

0x0000000c (INIT) 0x10a01

(要了解更多的加载的原理请看安卓源文件linker/linker.cpp 中的 soinfo::CallPreInitConstructors())


在IDA里要处理一下,看一下反汇编(因为内存对齐,实际地址是0x10a00)


后面就是花指令,在内存里跳来跳去的.


以上就是现在所研究的到的情况,有能力且有兴趣的可以Q我: 交流可Q: 3.1.0.4.1.9.0.6.2 (倒序)



补充1:如何调试并断在INIT: (7楼)

网上相关文章
Andorid APK反逆向解决方案:梆梆加固原理探寻
f65K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4K6k6r3&6Q4x3X3g2F1k6i4c8Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3x3U0l9I4x3#2)9J5k6o6l9$3i4K6u0V1x3U0k6Q4x3V1j5J5z5o6p5#2z5e0V1#2i4K6u0V1b7h3&6V1M7X3!0A6k6q4)9J5k6r3q4H3K9#2)9J5k6r3u0S2L8X3N6U0L8r3f1`.

如何做好移动安全(梆梆加固后的APK破解提取dex)
628K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3j5i4y4E0j5%4k6U0i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5I4z5o6t1I4y4U0f1K6x3b7`.`.

【原创】梆梆加固apk的一点思考
http://bbs.pediy.com/showthread.php?p=1162634

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (27)
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
有很暴力的方式,把虚拟机内存给dump下来,然后搜DEX
2014-7-10 09:25
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你dump出来的也不是完整的,要修正内存dex结构吧
2014-7-10 09:35
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
就算dump出来内存也搜索不到dex,dex在内存里面处理过了,真正被加载的dex的头应该是被修改了。
2014-7-10 09:46
0
雪    币: 32
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
梆梆和爱加密其实就一垃圾,要拿dex轻而易举,是大牛都懂的!
2014-7-10 11:18
0
雪    币: 98
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
惊现装逼党。。。
2014-7-10 11:38
0
雪    币: 193
活跃值: (1502)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
补充1:如何调试并断在INIT:

自己写个程序,调用libsecexe.so,加个按钮,在点击时才加载,
调试时先attach进程,找到linker的dlyopen的开始跟

dlyopen在/system/bin/linker里,IDA里没有看到导出,只能找通过找文本找到函数



本次进去到soinfo::CallFunction,地方


输出代码


void soinfo::CallConstructors() {
  ...
  CallFunction("DT_INIT", init_func);
  ...
}




void soinfo::CallFunction(const char* function_name UNUSED, linker_function_t function) {
  if (function == NULL || reinterpret_cast<uintptr_t>(function) == static_cast<uintptr_t>(-1)) {
    return;
  }
  TRACE("[ Calling %s @ %p for '%s' ]", function_name, function, name);
  function();//上面的BLX R4就是这里
  TRACE("[ Done calling %s @ %p for '%s' ]", function_name, function, name);
  set_soinfo_pool_protection(PROT_READ | PROT_WRITE);
}


找到后断在 BLX R4地方,最后再点击按钮加载
上传的附件:
2014-7-10 12:38
0
雪    币: 32
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
装不装逼,放个最新版本梆梆加固的APP上来即可
2014-7-10 13:33
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
用定制的系统拿dex自然是轻而易举,关键的API拦截一下就行了,楼主这里是想讨论如何突破它的so保护措施的吧?
2014-7-10 13:44
0
雪    币: 32
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主原话“之前网上传的梆梆加固的破解方法,现在已经失效,gdb attach子线程直接退出,根本gcore不出任何有价值的东西.

现在还暂时找不出直接拿到dex的方法,”
2014-7-10 13:47
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好吧,如果楼主只是想拿到dex的话,推荐还是定制一个系统吧,自动化破解加固~
ps.不过对这种so的保护措施我还是很感兴趣的,貌似很牛逼的样子。。。

2014-7-10 13:58
0
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
最多修改一下头,其他信息都必须还原。你可以同Method对象所指向的内存,往上找~
2014-7-10 14:30
0
雪    币: 107
活跃值: (429)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
反正内存弄出来的odex..确实是需要修复...水平有限,等忙完手头项目再研究如何修复之类...but可以看完整的smali....需求已满足..哈哈..

挡住了dex2jar...没挡住baksmali嘛
2014-7-10 16:57
0
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
14
感谢分享,学习了!
2014-7-13 22:29
0
雪    币: 30
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好像都很牛啊,还定制的系统,,,怎么定制来具体说说
2014-7-14 14:53
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
难道是davilk虚拟机层面的定制?
2014-7-14 18:57
0
雪    币: 246
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
貌似楼主的分析还是刚刚开始。后面还有很长的路要走啊。
2014-7-14 20:32
0
雪    币: 204
活跃值: (2819)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
哎 最近老是碰到 被加固的apk  求大牛 写篇脱壳 贴
2014-7-22 16:01
0
雪    币: 249
活跃值: (435)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
mark...
2014-7-30 12:51
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
和win差不多吧,重载或者自建调试机制
2014-7-30 12:58
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
还用重载?自己定制个kernel,想干啥干啥
2014-8-3 19:08
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
这么多梆梆加密过的游戏,为什么还是被破解
2014-10-7 17:24
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
爱加密?不是很好用
2014-10-31 15:00
0
雪    币: 3533
活跃值: (1803)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
24
请教下所谓定制系统是怎么个回事??怎么定制?有没有类似资料,介绍下好么?最近看到一个加密的app,只想看到其中smail就行,不用达到编译目的,怎么做?谢谢!
2014-11-28 13:26
0
雪    币: 67
活跃值: (53)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
25
DEX文件要被加载到虚拟机中运行,可以考虑在这时做文章.但现在的APK已经远不是拿下DEX有用的了,很多逻辑都是.SO开发的,.SO本身还被加密.
2014-12-2 11:10
0
游客
登录 | 注册 方可回帖
返回