近来看了非虫大大的Android软件安全与逆向分析,这段时间又在做安卓开发,对安卓逆向产生了浓厚的兴趣,随尝试对一个简单小程序进行crack,虽然很简单,但是我这个菜鸟还是遇到了一些困难,好在是解决啦。分享一下我的crack和心得: 程序是来自《第一行Android代码》的一个例子,简单说就是验证用户登录的功能,源代码中的验证逻辑是这样的: 之前对smila文件进行破解已经成功,但是一时心血来潮想要试试用IDA进行反汇编破解,于是取出dex文件,丢到IDA中, 接下来用apktools对apk反编译,拿到public.xml文件,查看里面的信息,突然想起这个程序的提示信息没有写在string.xml里保存,那该怎么找破解点呢,首先想到的是登陆的按钮,找到public.xml中的登陆按钮所给的id 拿着0x7f080006去IDA里找,找到之后发现一个问题,这里的验证时写在按钮监听器事件里的,而此时IDA的定位却在OnCreate的主调函数下,里面的if-epz是用来验证是否记住密码的,上下翻了翻没有找到连续判定的两个if条件,于是想着换一换其他资源的id,比如输入框之类的,同样没有进展。 感觉首次尝试就受到了阻碍,于是开始换个角度思考,既然找不到(IDA解析出的结果行数很多)If的破解点,就从类名下手,查看之前解出的smail文件,发现破解点所在的类名为LoginAvtivity,把这个字串丢到IDA下搜索,果不其然找到了破解点的位置: 下面的事情就很简单了,查看HEX编码的位置,然后去c32asm下定位修改,把两个OP_IF-EQZ操作码38改成39,也就是改成if-nez: 然后重签名打包回去进行验证,可以看到破解成功的效果。 心得:这是我第一次自己分析进行的crack尝试,在过程中遇到了一些小困难,但是我觉得在以后 的破解过程遇到困难的时候,一定要多尝试多变通,看看有没有其他的方式方法来找到破解点,也希望自己这个小菜鸟能在看雪论坛中努力成长,大家共勉!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课