您的位置:首页 > 移动开发 > Android开发

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



生成dex



第二步:dex 2 jar



生成jar



第三步:引入Java工程。

第四步:解压jar包得到class文件置于Java工程bin目录下(注意目录层次)。

第五步:调用jar包中的解密方法:



运行



大功告成!

可能遇到对的问题:

1. smali文件引用其他文件中的类,导致调用失败。

解决:涉及到的所有类一起smali2dex。

2. 引用了Android环境相关类或api。

解决:apk的整个dex转为jar,在Java工程中创建空的Android同名类,骗过编译器即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息