目录
  1. 1. 20200518
    1. 1.1. 修改smail重新打包
反编四:它来了

20200518

  周末找了个反编大佬吃了个饭,聊到这个事情他给我提了好几个意见。但是我一个也没采用,因为对于我来说有点太麻烦了, 对于我说的dump 内存 他表示不现实,dump几百M的内存出来 在里面找几个字节的东西,有点不太现实,而且你也不知道内存地址,只能一个个试不靠谱,他的建议是自己从AOSP弄个Android源码下来(这个我有当初想拜读一下Android源码但是太庞大了下不去口啊) 然后自己编个Android版本 然后通过ClassLoader 来拿到想要的东西。
  本想奔着这条路走的, 编译Android也玩过,不过我很好奇一个东西为啥JustTrustMe 能Hook成功呢,然后google了一些失败的案例发现了一篇国外的文章,大概的内容就是延时了几秒再hook 然后就可以了。本着试试的心态折腾了一番,它不再卡在opening了。getHost也能hook到拿到返回值了。这里其实有点不太理解为什么,讲道理App刚打开的时候确实没有调用这些方法但是Hook这玩意不是运行时完成的应该是加载class的时候就处理了,打开App的时候dex应该就已经加载到内存里了。不懂,后面在看看把

  在getHost成功后 疯狂了写5个hook方法想把 JniUtil中的返回值都Hook出来,一顿操作后,安装,挂载,重启Xposed,打开App, 他进到广告页了,倒计时3 2 1 它崩溃了。问题是还打印不出奔溃log,不信邪,一个个来把,
getAesIv无返回值
getChatKey无返回值
getCipher无返回值
getComIdKey有返回值 -> 1558668802991598
getLiveKey无返回值
getRequestKey有返回值 -> xmzex2019^%$#@!

总算是拿到两个值了。 但是为什么 getComIdKey有值 getCipher 和getAesIv会没有值呢,他俩在getComIdKey的时候就应该有值了啊,不应该啊。然后又看了一遍代码发现自己有点憨憨了。

在Security加密类中 有几个已经直接放到静态变量里面了,那我为啥还要hook getCipher和getAesIv的返回值呢,直接把CipherStr和LIVE_KEY的值给反射出来不就好了嘛 。

这里直接把所有的成员变量都给反射出来了

不过CipherStr还是没有出来,但是这个已经不影响了,有密钥、偏移量 AES也就那么几种加密模式 试试就出来了。最终定位到AES/CBC/PKCS5Padding。
至此需要的几个Key就都有了。 ChatKey暂时不知道在哪用所以就先不管了。

修改smail重新打包

自己的工程建一个一毛一样的JniUtils 然后移除jni的调用将返回值写死成hook的值然后通过java2Smali编译成smali文件
修改到原来的项目里面 通过apktool打包然后签名上一本自己的证书。 然后 adb install

嘻嘻 It’s work
功能正常,但是发现无法消费。应该就是 getChatKey 的问题了。 得看看源码这玩意是在啥时候调用的了。
到这一步还是有点成就感的。哈哈

21:56
成功的找到getChatKey 的调用位置后修改了下代码,运行然后走到会调用到getCipher的页面 getCipher也成功出来了

打包,签名运行。
一切完美运行。。。 至此就和签名无关了,可以打开debug然后做调试了。剩下的就是看怎么你那个解决money的问题了。 如果逻辑差一点还是有可能当个”有钱人”的。

文章作者: Fibonacci
文章链接: http://sovwcwsfm.com/blog/page/decompile04.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog