wyatton 发表于 2020-6-19 10:59

原创APK壳,隐藏的dex和so【悬赏已结束】

本帖最后由 wyatton 于 2020-7-7 15:03 编辑

悬赏结束了,APK尚未被破解。————2020.6.27

如果有人想试试这个加固来保护你的APK,可以私信我(免费)【提供APK即可】
不提供加固工具哦,有需要的直接留言或私信我APK下载地址。
如果是Java代码加固,写明需要加固的包名或类名。
如果是so加固,写明需要加固的so名称。目前版本只支持(所有)函数加固,不支持其他自定义的导出符号。

公布一下算法吧,如果有兴趣继续研究的,可以作为参考(有爆破点的,想一想你就会发现):
最后,发这个帖的本意还是在于脱壳

//onCrackmeClicked中的Java源码生成密钥的算法如下:
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
String s = "检测到你改签名了,你得把这个过了,不然就不让你继续。";
byte[] sigHash = new byte[] {(byte)0x6d,(byte)0xf2,(byte)0x47,(byte)0xa8,(byte)0xe0,(byte)0xc8,(byte)0x3a,(byte)0xb3,(byte)0xde,(byte)0x58,(byte)0x85,(byte)0x1e,(byte)0x17,(byte)0xc3,(byte)0xa9,(byte)0x50,(byte)0xd6,(byte)0x97,(byte)0x26,(byte)0x1d}; //这是APK签名的SHA1
byte[] seeda = ("这是计算密钥用的seed" + s + "随便加个salt香不香").getBytes("UTF-8");
Random rnd = new Random(seeda.length + sigHash.length);
for (int i = 0; i < 100; i ++) {
    int x = rnd.nextInt(seeda.length);
    int y = rnd.nextInt(seeda.length);
    byte b = seeda;
    seeda = seeda;
    seeda = (byte)(b ^ sigHash);
}
sha1 = MessageDigest.getInstance("SHA1");
byte[] b = sha1.digest(seeda);
byte[] buf = new byte;
for (int i = 0; i < buf.length; i ++) {
    buf = (byte)(b ^ sigHash ^ rnd.nextInt());
}
//将buf转成16进制的小写字符串就是密钥了。
====================================================

本人研究了一个APK加固,想找人研究一下强度,做了一个crackme,如果你能破解掉,会显示一个红包口令,如果能告诉我一些你的思路,那就非常感谢了。
如果红包24小时未被领取会失效,我会再次续上(最多续7天)。
如果红包被人领了,我会编辑帖子说明,并不再续红包。
附件内有APK,或者某盘下载:
链接: https://pan.baidu.com/s/1O6u4shUydA-xKu6_Yv5gIw 提取码: vdc4

=== 2020.6.24更新 ===
进行到第5天,我觉得红包什么的已经显得没那么重要了。
不如我们把重心放到壳上面?
本人目标是做一个无法被脱壳的终极壳,个人认为dex已经实现无法脱壳(原Java/smali代码已经不存在了),so还有几个点还需要再加强一下。
坐等大神出现。

=== 2020.6.23更新 ===
帖子浏览量不再上升的话,后面就不再多公布信息了,有兴趣的应该都下载了,没兴趣的看最后结果就行了。最后一天结束后可能会直接公布密钥算法。
其实密钥算法不复杂,因为这个crackme主要是为了看一下壳的强度,不过大家的兴趣貌似都在红包口令上。/手动笑哭

=== 2020.6.22更新 ===
原红包口令已失效,由于支付宝限制,口令不能重复,现口令变更为:APK中显示的口令后面加个1
这里分享一点个人对加密数据的一点心得:
由于现在各种hook框架泛滥,所以加密数据时要注意尽量避开这些雷区,否则无论你的算法写得多复杂,都有可能一运行就被人知道了密钥,甚至都不需要破解分析,比如:
Java的重灾区:String类,MessageDigest类,Cipher类(所有内置的加密算法),等等,这些常用类很可能被hook,如果你用这些类来处理加密数据,有可能直接被拿原文。即使你使用了各种方法来反hook,别人也可以直接修改系统达到打印出原文的效果。
例如回复帖中就有人很快就分析出了一些数据,个人猜测很可能是直接就被打印出来了,并不需要逆向算法。(String类,MessageDigest类,Random类,还有Android的一些类)
所以Java层的加密数据,尽量要使用原生类型(int,byte....这些)来进行计算,然后尽量自己写算法,没错,就算是 b=b+1 都比 b=((Cipher)aes).doFinal(b) 来得更安全。
C代码的重灾区:各种字符串操作的函数很容易被hook。相对来说,如果能把加密数据的算法写进native层那安全性会上升一个档次。但是native层的逆向现在也不稀奇了,即使有ollvm高强度混淆,也可能会被轻易破解。
以上是一些个人心得,供仅参考。

=== 2020.6.21更新 ===
原红包口令已失效,由于支付宝限制,口令不能重复,现口令为APK中显示的口令
再透露一点信息,so的混淆主要分两块:一是ollvm的混淆,二是我自己写的一点简易混淆,双重叠加,所以如果直接进行静态分析起来可能会比较累。
另外,直接打开so静态分析的人可能看到了,data段很大,分析过其他加固的人可能猜到了,这里很像是放了被加固的代码{:1_918:}

=== 2020.6.20更新 ===
原红包口令已失效,由于支付宝限制,口令不能重复,现口令变更为:APK中显示的口令后面加个1
透露一点这个加固壳的信息:
这个加固程序是原创开发的,没有采用任何第三方的开源库,所以市面上的一些套路可以在这里不是很适用。
文件名有包含vmp,但实际上目前并没有加上vmp技术。这么做是因为两点:一是打一下心理战,二是后面有计划增加vmp
这个壳分两部分:dex壳和so壳。dex壳由于直接将dex转成了native代码,所以原始的dex是无法复原的(就是dex不用脱,看到的代码就是最终代码了)。so壳暂时不讨论更多,如果静态打开so的话,首先看到的就是混淆后的壳代码。

赤座灯里 发表于 2020-6-19 16:15

本帖最后由 赤座灯里 于 2020-6-19 19:14 编辑

单击按钮后做了下面几件事:
Log.d显示进入,取自身签名的SHA1同6D F2 47 A8 E0 C8 3A B3 DE 58 85 1E 17 C3 A9 50 D6 97 26 1D做比较;
相等后将"这是计算密钥用的seed"与“检测到你改签名了,你得把这个过了,不然就不让你继续。随便加个salt香不香”连接后getBytes作为seed,接着调用new Random(151)后调用200次Random.nextInt(131),得到;
然后将[-35,-23,38,-28,-24,102,-24,35,-95,-115,-82,-105,-34,-81,-122,99,-110,-67,-95,127,-28,-30,-68,-117,-83,109,101,-25,-28,-35,88,-26,-90,53,47,100,57,12,-27,-23,-104,54,53,58,-105,9,126,-25,-124,-24,-80,-118,-70,24,-116,74,110,-96,-27,-126,-86,-115,-17,-118,4,3,30,-27,-12,48,-28,112,-39,47,-69,77,-82,-68,-68,-28,-66,-58,-25,-13,-28,-101,52,45,-1,-95,-66,84,56,-34,-28,-25,-96,94,-71,-89,-25,-26,0,3,-81,-126,-66,-2,-113,54,-102,-65,-79,-124,-65,51,-72,-86,115,97,-70,-116,107,125,-103,-28,-36,-40,-12,108,23]SHA1后得到[-72,-14,-64,27,-14,-52,-103,-19,95,-111,0,18,-58,84,-53,47,58,-124,105,98];
再调用32次Random.nextInt()得到。

剩下的应该就是一些变换和比较了,交给别人玩吧
并不算真正的vmp,感觉就是Dex2C后加了ollvm

wyatton 发表于 2020-6-19 19:55

佚名RJ 发表于 2020-6-19 19:37
万恶的度盘,虽然500元看到这度盘链接也让我提不起兴趣

让大佬失望了,深感愧疚,立马上了一个zip到附件中。{:1_893:}

灵剑丹心 发表于 2020-6-19 17:28

本帖最后由 灵剑丹心 于 2020-6-19 17:52 编辑

装逼猿:500你是瞧谁不起呢。不好意思走错片场

by忆殇 发表于 2020-6-20 03:33

佚名RJ 发表于 2020-6-19 19:59
好说好说,马上搞定,钱马上就是我的了!

7个半小时过去了,怎么样了

涛之雨 发表于 2020-6-19 14:00

vmp{:301_1001:}
不会搞

无颜君〃 发表于 2020-6-19 12:49

500.。。太牛逼了

Wanderer-Q 发表于 2020-6-19 13:19

有大佬破解了吗???

wyatton 发表于 2020-6-19 13:57

Wanderer-Q 发表于 2020-6-19 13:19
有大佬破解了吗???

目前还没有,红包还显示“领取中”

windy_ll 发表于 2020-6-19 14:04

so层混淆到我看到就溜了

pumishuo 发表于 2020-6-19 14:16

非常的复杂, 研究中

wyatton 发表于 2020-6-19 14:18

pumishuo 发表于 2020-6-19 14:16
非常的复杂, 研究中

感谢支持{:1_893:}

菜鸟--不二 发表于 2020-6-19 14:30

老哥这壳也做得很牛逼 吧,现在都没大佬做出来

guangguang210 发表于 2020-6-19 14:57

菜鸟--不二 发表于 2020-6-19 14:30
老哥这壳也做得很牛逼 吧,现在都没大佬做出来

小白来围观,膜拜一下{:1_918:}
页: [1] 2 3 4 5
查看完整版本: 原创APK壳,隐藏的dex和so【悬赏已结束】