Reverse 2020网鼎杯 bang Writeup(安卓简单的加壳)

记录下踩过的坑提醒下自己
点这里有解法2

我用到的工具:

  • jadx
  • DexExtractor
  • 做好的镜像
  • adt-bundle(eclipse)
  • apktool
  • baksmali.jar 和 smali.jar

1. 观察特征

先拿 jadx 看了下,没有activity类,这里可以注意到 AndroidManifest.xml 无写权限(第3步会说明)
Reverse 2020网鼎杯 bang Writeup(安卓简单的加壳)_第1张图片
度娘了一下SecShell,再结合题目,应该是梆梆安全加固-.-
参考了最新各大apk加固特征库

  • git上现搜的工具DexExtractor
  • 根据md提示,下载了做好的镜像

2. 模拟器就位

下载镜像版本是 android-19,需要版本一致~

我的坑一:一开始用的 Android Studio 3.6 建的AVD,结果 android-19 的版本的模拟器怎么装都起不来,高版本的没问题。然后就弃了以后再研究。

  • 用了老的 adt-bundle(eclipse),AVD新建启动,没有问题。后来由于本机SDK过于杂乱,挨个system.img重命名才 找到adt-bundle(eclipse)所用的system.img,备份下用新下载的替换之。

AndroidManifest.xml 无写权限,可以直接跳第3步

虚拟机装上了apk,启动apk,logcat筛选一下:
(找sdk路径吧adb环境变量加上了,方面以后写命令)

 adb install  signed.apk

权限
根据大佬的文章提示,AndroidManifest.xml缺少权限。

3.改apk

  • 使用apktool反编译:
java -jar apktool_2.4.1.jar d signed.apk

我的坑二 :apktool版本要新,否则各种报错

AndroidManifest.xml 的 manifest 标签里添加WRITE_EXTERNAL_STORAGE权限:


  • 使用apktool回编译:
java -jar apktool_2.4.1.jar b signed

apk在 signed/dist 里,install 报错 INSTALL_PARSE_FAILED_NO_CERTIFICATES,需要签名,用命令行或者Android开发工具( adt-bundle 等)自己生成个keystore,然后签名输密码:

jarsigner -verbose -keystore 我的.keystore -signedjar 新.apk 回编译.apk keystore别名

4.dump

安装运行看logcat(闪退了,还没研究原因,不过不重要 ):

05-10 04:00:16.680: E/dalvikvm(4396): --pacthed-- , /sdcard/xxxxxxxxxxxxxxxxx.dex

通过 adt-bundle(eclipse) 的DDMS找到 storage/sdcard 下的文件,有很多dex,找到和apk包名一致的dex,本题有多个,都pull出啦,存到本机。

  • 使用工具DexExtractor,生成xxxx.read.dex文件:
java -jar Decode.jar D:\pull

6.使用baksmali.jar 和 smali.jar

输出到classout1、classout2目录:

java -jar baksmali-2.4.0.jar disassemble  -o ./classout1/ com.example.how_debug_classes_1925304.read.dex
java -jar baksmali-2.4.0.jar disassemble  -o ./classout2/ com.example.how_debug_classes_18856.read.dex

看包名挑选一下,重新打包生成最终dex文件:

 java -jar smali-2.4.0.jar assemble ./classout1  -o  final.dex

jadx打开,拿下~

主要参考的文章:
最新各大apk加固特征库
[操作向]DexExtractor的使用

你可能感兴趣的:(CTF)