Smali奇幻之旅 —— 字符串解密
2013-12-22 11:53
183 查看
逆向apk文件的过程中,经常遇到加密的字符串,或用来反射调用敏感API,或用来隐藏某些key word,最终达到蒙蔽逆向分析人员双眼的目的。
常规的解决思路有如下三种:
1. 将Smali文件中的解密算法逆向为Java源文件(太耗时!);
2. 反编译apk后注入Log打印明文(反编译或回编译不成功怎么办?);
3. Apktool + Netbeans动态调试查看明文字符串(-d反编译不成功怎么办?apk反调试怎么办?)
在经历了重重挫折之后,我们是不是被拒于明文之外了呢?NO,光明依然存在!
试想,我们是怎么破解apk的?
反编译,得到Smali源文件和一系列其他文件。。。
修改Smali破解apk。。。
回编译包含Smali的工程,签名。。。
蹊跷在哪里?
我们回编译的过程中,Smali文件夹回编译成了Dex文件。
说这个有什么用呢?当然有用!
大家不要忘了dex2jar,有没有一点启发?是不是想到了什么?如果没有,你可以这样想:
从上面的分析,我们可以得到这样的转化:
smali ——> jar
神奇!我们得到了jar包,那个导入Java工程就可以调用的jar包,是不是倍感亲切!
下面展示具体过程。
第一步:smali 2 dex
![](https://img-blog.csdn.net/20131222113632359?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlkYWxpcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
生成dex
![](https://img-blog.csdn.net/20131222113730000?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlkYWxpcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
第二步:dex 2 jar
![](https://img-blog.csdn.net/20131222114112671?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlkYWxpcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
生成jar
![](https://img-blog.csdn.net/20131222114253015?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlkYWxpcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
第三步:引入Java工程。
第四步:解压jar包得到class文件置于Java工程bin目录下(注意目录层次)。
第五步:调用jar包中的解密方法:
![](https://img-blog.csdn.net/20131222114514031?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlkYWxpcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
运行
![](https://img-blog.csdn.net/20131222114607250?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGlkYWxpcGluZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
大功告成!
可能遇到对的问题:
1. smali文件引用其他文件中的类,导致调用失败。
解决:涉及到的所有类一起smali2dex。
2. 引用了Android环境相关类或api。
解决:apk的整个dex转为jar,在Java工程中创建空的Android同名类,骗过编译器即可。
常规的解决思路有如下三种:
1. 将Smali文件中的解密算法逆向为Java源文件(太耗时!);
2. 反编译apk后注入Log打印明文(反编译或回编译不成功怎么办?);
3. Apktool + Netbeans动态调试查看明文字符串(-d反编译不成功怎么办?apk反调试怎么办?)
在经历了重重挫折之后,我们是不是被拒于明文之外了呢?NO,光明依然存在!
试想,我们是怎么破解apk的?
反编译,得到Smali源文件和一系列其他文件。。。
修改Smali破解apk。。。
回编译包含Smali的工程,签名。。。
蹊跷在哪里?
我们回编译的过程中,Smali文件夹回编译成了Dex文件。
说这个有什么用呢?当然有用!
大家不要忘了dex2jar,有没有一点启发?是不是想到了什么?如果没有,你可以这样想:
从上面的分析,我们可以得到这样的转化:
smali ——> jar
神奇!我们得到了jar包,那个导入Java工程就可以调用的jar包,是不是倍感亲切!
下面展示具体过程。
第一步:smali 2 dex
生成dex
第二步:dex 2 jar
生成jar
第三步:引入Java工程。
第四步:解压jar包得到class文件置于Java工程bin目录下(注意目录层次)。
第五步:调用jar包中的解密方法:
运行
大功告成!
可能遇到对的问题:
1. smali文件引用其他文件中的类,导致调用失败。
解决:涉及到的所有类一起smali2dex。
2. 引用了Android环境相关类或api。
解决:apk的整个dex转为jar,在Java工程中创建空的Android同名类,骗过编译器即可。
相关文章推荐
- C++/VC/MFC字符串/文件加解密
- Silverlight中的字符串常用加解密
- 华为oj 字符串加解密
- java 字符串 asc 加密解密
- HW--字符串加解密
- 字符串处理 2015百度之星资格赛 1002 列变位法解密
- [置顶] C 字符串模二加加解密
- 解密XenoCode加密的字符串
- 字符串,加密解密算法
- 解密XenoCode加密的字符串
- 字符串加解密
- base64加解密字符串
- 安卓NDK开发案列一:字符串的加密和解密
- 字符串加解密
- ABAP字符串的加密与解密
- python字符串加密解密的三种方法分享(base64 win32com)
- 字符串加解密
- 字符串简单加密解密函数(转)
- 加密解密链接字符串
- 利用Java API对字符串进行加密解密(DES加密算法)