我的逆向之旅

      欧陆战争之前玩的一款游戏。

一、破解准备、

      jd-gui、apktool、欧陆战争apk、

二、破解过程、

      首先第一步,自然是解压apk,得到App的dex文件,通过dex2jar将dex文件转成jar文件通过jd-gui程序查看Apk的源代码,我们这里可以看到代码是经过混淆的,但是没有经过加固。

    这里转化使用的命令为 d2j-dex2jar.bat classes.dex

 

      得到源代码后,用于之后的分析。

 

         第二步,我们需要得到apk的smail文件,用于执行程序打断点调试,这里面我们使用apktool获取工程文件。

     使用该命令apktool.bat d -f xxx.apk  得到该文件夹。

        通过AS导入该工程,运行调试。调式过程如下,我们首先将apk安装在我们的模拟器上,运行,打开monitor,在andorid/sdk/tools下面,打开后,点我们需要调试的app,双击选中。

     在AS中导入我们的工程后,我们首先在editConfiguration中配置我们的remote调试,端口设置为8700,我们的monitor通用端口,接下来就跟我们在平时开发时一样,打断点调试。

 

 

  一切准备好后我们,开始调试我们的程序。这里需要注意在debug按钮时,首先在monitor中双击选中我们的调试进程,否则会出现connect fail的错误。

 

    接下来开始破解,首先我们重新将我们反编译出来的程序重新打包成apk。

    通过该指令 apktool.bat b xxxx,重新打包出来的apk文件会出现在dist文件夹中,接下来我们需要重新签名,安装到我们的模拟器中。

    使用Auto-sign工具,使用java -jar signapk.jar testkey.x509.pem testkey.pk8 oulu5.apk oulu5_signed.apk 命令生成签名后的apk。

  通过adb install xx.apk命令安装到我们的模拟器上,安装成功,我们点开后发现闪退,安装正版App无此现象,再通过分析可得,我们没有改变任何东西,只是重新签名,可以知道,该App做了签名自校        验,分析源代码我们可以看到,在这里面他获取了apk的签名,进行比对,比对在java程序中并没有找到,可以猜想是在native层做的比对。这里采用一个办法,hook packageManger,将他之前的签名传         进去。这里用了如下方法。

       https://github.com/xxxyanchenxxx/SigKill 使用这里面的方法,原来代码中没有application,我们重新添加一个Application按照他的方法,可以发现,接下来我们运行到了开场动画结束前,都能正常运行。

    但是之后可以发现,当开场动画放完之后,我们的程序依然崩溃,查找原因。首先排除签名失败的问题,因为可以通过,这时候需要查看异常打印的log。这个需要我们在monitor中查看,可以发现报   错异常。

 

  可以看到是jni调用java方法造成的sharedPreference空指针。接下来我们找到这个java方法。我们可以看到它通过调用了这里。

 

    暂时分析不出这里代码的作用,我们可以看到,他返回的是boolean值,我们则删除调用的方法,直接返回一个true,让程序首先运行起来。

    之后可以发现程序运行成功,在修改一些字符串资源试验成果。

 

    可以发现修改成功,游戏也可以正常玩耍,接下来就到了最关键的时候,找到我们的支付那一块的代码,做关键的处理。

 

源Apk:

https://www.xiaogouh5.com/dgumln/88664b74ef4e8ab1.html 欧陆战争5 

引用:

https://blog.csdn.net/sxk874890728/article/details/80486223 一步一步带你反编译apk,并教你修改smali和重新打包

https://www.jianshu.com/p/b0ef40b5d3ed Android Studio动态调试第三方APK

https://blog.csdn.net/xxooyc/article/details/78774384 一键绕过App签名验证

 

posted @ 2019-01-11 19:57  YRLeaner  阅读(452)  评论(0编辑  收藏  举报