sun博客

记录点滴!

所用工具: 010editor+dexfixer +android killer+apktool(要最新版,我使用的2.7.0,低版本打包资源文件时会报错)

dex修改之后,可用dexfixer工具修复。

工具下载在这里。

https://down.52pojie.cn/

思路1:

apktool反编译后,修改smali文件,之后再打包。使用android killer 签名,缺点要等挺长时间。

2:

使用360打开apk(注意不是解压),提取出里面的dex文件。ida打开找到位置,使用010editor修改后,再使用dexfixer签名。注意dex.035的头有可能会变成dex.038。之后再把原来的dex文件和META-INF文件夹删除掉,添加修改之后的dex文件,使用android killer 再签名即可。

so层动态调试

在动态调试这里耽误了不好时间,之前一直以为需要app开启debug模式或者安卓系统打开debugger才可以。这两天自己写了一个带so的app,实测是不需要的。

使用工具IDA7.7

注意:android:extractNativeLibs=”true”要在androidManifest.xml中写明。原因如下;我因为 minSdkVersion为26,所以默认为false,false的话,动态调试时会找不到目标so,自然也就无法调试了。

android:extractNativeLibs = true时,gradle打包时会对工程中的so库进行压缩,最终生成apk包的体积会减小
但用户在手机端进行apk安装时,系统会对压缩后的so库进行解压,从而造成用户安装apk的时间变长

关于android:extractNativeLibs默认值设定方面,若开发人员未对android:extractNativeLibs进行特殊配置:

  • minSdkVersion < 23 或 Android Gradle plugin < 3.6.0情况下,打包时 android:extractNativeLibs=true
  • minSdkVersion >= 23 并且 Android Gradle plugin >= 3.6.0情况下,打包时android:extractNativeLibs=false
<application
    android:extractNativeLibs="true">
</application>

参考文档:https://blog.csdn.net/weixin_48967543/article/details/115269878

1,如果是需要以32位ida调试,则使用:

adb install --abi armeabi-v7a

安装app后打开,点击目标按钮以让目标so库加载进来。

2,将ida文件夹中dbgsrv中的android_server和android_server64两个文件push到/data/local/tmp中,命名可以是as和as64,chmod 777 赋予执行权限后执行。方法为:./as

adb forward tcp:23946 tcp:23946(将手机端口转发到电脑)。

3,debugger—attach—remote ARM Linux/android debugger—hostname选择localhost后点击确定,选择进程后等待,在右侧module中找到目标so的基地址,另外一个ida,找到目标函数偏移。计算后快捷键G,跳转,f2断点。回到手机上,点击目标按钮,此时ida进入了断点模式。step into F7表示进入函数,step over F8表示一行行的走。F9表示到下一个断点,没有断点程序一直执行完。

(android软件安全与逆向分析一书中259页,使用ctrl+s 打开段选择对话框,结果发现有多个同文件名so,不知道是哪一个,右侧module中搜索只有一个,我觉得从右侧module中找基地址更好一些)

最后还是总结下,adb安装时如何指定在ARM环境下以32位还是64位运行:

要想指定应用在64位终端下以32位方式模式下运行,可以使用如下命令:

adb install --abi armeabi-v7a

要想指定应用在64位终端下以64位方式模式下运行,可以使用如下命令:

adb install --abi arm64-v8a

如果是其他的Android平台,譬如X86或者其它的,可以使用如下命令:

adb install --abi

app下载链接

发表评论

邮箱地址不会被公开。 必填项已用*标注