首页
社区
课程
招聘
[原创]某android广告SDK逆向分析总结
发表于: 2016-7-22 14:22 5866

[原创]某android广告SDK逆向分析总结

2016-7-22 14:22
5866

分析过程就不讲故事了,只说结论性的东西

0x0. 一张图胜过千言万语


0x1.  核心代码加密隐藏

该广告SDK即图中A.jar,使用时import进来即可。A.jar基本都是proxyfunction,核心代码在B.jar中实现,所以B.jar是不会轻易让cracker拿到的。B.jar文件采用DES加密并base64编码,8字节的秘钥跟在最后面, 以StringBuffer变量形式存放在A.jar的某class中

StringBuffer jarFileContent = newStringBuffer().append("6kVkS1Ny/KKlJKs+fT9kTF--这里就是DEX密文啦--mtkc2WNXTCerh1JHGXS.....密钥)

0x2. DEX动态加载框架

调用接口基本类型
     Object invokeObjectMethod(string 类名, string 方法名, class[] 参数类型数组,object[] 参数数组)

调用示例:
        (String)invokeObjectMethod(newString("com.abc.classA"), "methodName", new Class[] {Integer.TYPE }, new Object[] { Integer.valueOf(resid) });

接口具体实现三步走
      1) 获取Class
         2) 获取Class对应的Object
         3)reflect invoke
         使用2个HashMap分别缓存Class和Class对应的Object,方便后续调用
      流程如下


0x3. B.jar制作
    按正常Java开发流程编导出jar,然后使用AndroidSDK所带dx工具将jar转换成包含Dalvik byte code的jar文件,如图所示

普通jar包只是一堆class文件的集合,但经过dx优化过后的jar只包含classes.dex

0x4. 截获B.jar
   根据图1我们知道B.jar在load完之后会被删除,那么将删除文件的代码注释掉即可(这里涉及到修改A.jar,不具体展开,请参考如何修改第三方jar自行搜索)
  使用修改过的A.jar编写一个app并按照广告SDK的调用流程调用一次,B.jar会产生并留在app的数据目录,然后使用adb或者devicemonitor将B.jar pull出来
  最后使用dex2jar工具将B.jar转换成普通的jar包,这样就可以使用java反编译工具进行分析了

0x5. DEX交叉调用出现ClassNotFound错误的解决
  我在修改B.jar时遇到了这个错误,原因是SlaveDex调用了在Main Dex实现的class方法,我们知道ClassLoader的一大特点就是树状结构,每个ClassLoader都有一个父ClassLoader,这个在构建DexClassLoader时会指定,指定父ClassLoader是一件要慎重考虑的事情,ClassNotFound症结就在于此,解决办法如下图

Classloader请参考
Android系统下的动态Dex加载  http://www.cnblogs.com/xitang/p/3534777.html

0x6. 防篡改与抗静态分析
    敏感类方法以reflect形式调用
    字符串常量转换成byte数组存储new String(new byte[] { 99, 111, 109, 46, 112, 50, 48, 49, 54, 48,49, 46 })

0x7. 刷他家广告
    我们私下聊


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

收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//