【原创】新人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被加壳了。。。。又跪了。。。老板开始耍流氓,许诺破解成功的福利吹了,不过想想对自己也有好处,还是发帖与君在逆向的道路上共勉吧!
- 【原创】新人android逆向破解的第一次感悟和思路分享
- 如何在Mac上开发Android应用(原创,给刚接触android和mac的新人)
- 如何在Mac上开发Android应用(原创,给刚接触android和mac的新人)
- 如何在Mac上开发Android应用(原创,给刚接触android和mac的新人)
- 新人的第一次
- Android逆向工程-破解
- 逆向的一些思路
- 培养新人的一点感悟!
- 逆向破解的基础
- 第一次的感悟
- 【逆向】第一次逆向的小CM
- 新人感悟~
- Android逆向-破解flappy bird
- 产品思路和产品策略的分享
- Android平台的防破解及逆向工程心得
- 第一次参加topcoder的感悟和解题报告
- 逆向入门--第一次的HelloWorld
- 关于算法学习的总结和感悟(原创)
- missing content stream
- PHP打印一个变量
- rror LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC
- spring框架_06 AOP
- 多线程及定时器
- 【原创】新人android逆向破解的第一次感悟和思路分享
- CreateProcess函数详解
- 黑马程序员_集合TreeMap练习:获取某一字符串的字母出现的次数
- linux下安装jdk+配置多个tomcat
- IOS添加pch预编译文件
- Needleman-Wunsch 算法和Smith-Waterman算法
- #define
- spring data solr 之多核配置
- Custom backBarButtonItem