【原创】新人android逆向破解的第一次感悟和思路分享

来源:互联网 发布:最新安卓java模拟器 编辑:程序博客网 时间:2024/06/18 12:57

第一次发到看雪论坛里,朋友说你也该写写博客了,在CSDN里潜水这么久,发一发吧!!


从事多年android手机系统framework的研发,去年下半年跳槽进一家做支付的小公司,从此进了破解SDK的坑。

第一个感悟是破解只需要根据需求,不一定要把so里面的算法解出来,我想能完全把so的算法提取出来的人绝对是极少数。
第二个感悟是思路很重要,努力的开阔眼界,积累经验,很多破解都是一个取巧加关键技术的掌握(不要以为这些技术很难,你只缺少一个方向,一个点切入),很少能找到从事这方面的人,更加难得的是从事这行业中的人愿意来和你交流技术经验

分享一:
刚刚进公司,面试也没有跟我说要我从事破解,忽然被要求来破解某个基地的SDK,对一个逆向工作的新人来说压力非常大,也不知道怎么入手。分享一下思路的变化过程

SDK脱离实际的apk来实现计费,比如捕鱼达人中的计费,脱离出来

先说一下SDK的加载过程,load so,然后init(context),调用order(param=appid,appkey,paycode,etc)发送短信计费

1.第一步肯定是分析计费短信的内容,研究了一天,发现是有一些参数外加一部分看不懂的类似MD5的几个字段的组合
2.反编译sdk中的jar包,然后还原会代码在demo中成功运行并成功计费,看了这部分的代码清楚了传进去的参数是如何被加密的,最后参数调用so里面生成短代内容的函数,开始傻了,怎么搞?
3.当时IDA等工具都不会用,也不知道该如何去用,但根据自己的经验结合jar包里有获取apk public key去猜测,应该会去检测这个游戏的包签名或者包下面的一些数据,是不是可以让so去校验的时候读取原生的apk数据就对了啊
4.其实这个过程大概花了1周的时候来猜测,最后把注意打到init上,so读取java的包的信息,看样子整个过程中只有context会传递一些信息,就new了一个新的context对象传进去,我就像个2B一样所有return的子函数加断点。。。真的让我发现了so会通过context获取包名,packagemanager等等,你要什么我伪造什么我希望的参数给你
5.命真的不错,计费成功。整个历时1个月,疯掉了一样跟SDK玩心眼。

分享二:
上面的刚刚破解完,然后领导又扔了另一个基地的过来,反编译完傻了,jar都没混淆,就几个native的函数声明,所有逻辑都在so里面

1.尝试用分享一里面的方法,跪了!
2.中间大概像个无头苍蝇一样在网络上乱撞,碰了一头包。。。。
3.跟几个做技术的朋友喝茶,谈论这个事情,为什么不抓内存?当时感觉内存应该很难吧,牵扯到技术点的掌握应该很多,头很大啊。。。(头天生也不小了)
4.然后进了看雪论坛,看了很多文章,还是一头雾水,后来在一贴回帖中有人推荐《软件安全与逆向分析》,鬼使神差的买了,动态调试so,不会arm指令,简单的学了一下基础的指令,开始啃so的动态调试,看看到底里面的内存数据是怎么组合的
5.没有完全看懂,但是发现了几个关键的地方,比如取了assets里面一张图,取了它的值来做MD5校验并放在了短代里面,读取了apk文件什么数据也做了同样的事情,可是我要怎么改变它呢
6.记得在论坛里有位大神写了一个ptrace的工具,有门!!!获取内存值的偏移量+so的基地址,改了它不就行了吗?
7.计费成功

中间纠结的过程我就不详细说了,上面是大概重点思路的演变过程。现在又来一个,坑爹的so被加壳了。。。。又跪了。。。老板开始耍流氓,许诺破解成功的福利吹了,不过想想对自己也有好处,还是发帖与君在逆向的道路上共勉吧! 

0 0
原创粉丝点击