某android广告SDK逆向分析总结

时间:2022-10-10 15:12:44

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


0. 一张图胜过千言万语

                   某android广告SDK逆向分析总结

1.  核心代码加密隐藏

该广告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.....密钥)

 

2. 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,方便后续调用

    流程如下

                                                                                           某android广告SDK逆向分析总结

3. B.jar制作

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

                                                                            某android广告SDK逆向分析总结

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

 

 

4. 截获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反编译工具进行分析了

 

5. DEX交叉调用出现ClassNotFound错误的解决

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

                                                                    某android广告SDK逆向分析总结

Classloader请参考

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

 

6. 防篡改与抗静态分析

敏感类方法以reflect形式调用

字符串常量转换成byte数组存储new String(new byte[] { 99, 111, 109, 46, 112, 50, 48, 49, 54, 48,49, 46 })

 

7. 刷他家广告

  我们私下聊