基础?打包杂乱签名?
ISCC打完后有很多mobil题目印象深刻,都要frida去hook
基础的安卓知识无非就那些
一个apk产生过程
资源文件(manifest.xml。resources。和assets)通过aapt打包得到R.java
R.JAVA内涵主要是资源
然后java的sourcecode也就是源码和R.java两个合到一起通过javac打包为.class
.class就是一个比较全面的整体了下来只需要用dx整合为class.dex
class.dex已经理论上是一个成形app
然后就是签名和打包也就是apk转换
打包签名Androidstudio,Androidkiller,签名还有Androidsign
很多吧反正就是产生签名文件然后选择签名文件打包
这里可以直接Androidkiller很方便
打包后
拆包
其实也可以直接转为zip去解压看内部
但是还有就是
apktool.jar来拆包apk
java -jar apktool.jar d -f 安装包.apk
会产生一个安装包名字的文件夹
这个文件夹通过apktool拆包得到的
与zip解压区别主要是
apktool得到的其实一个smali的文件夹
smali类似于exe中的汇编代码
而.dex是打包文件,如果不用apktool得到的是.dex这个文件看你不到源码
可以用jadx或者jeb反smail直接成java
我理解中samil就是exe的那种汇编然后jadx反汇编的java就类似于伪代码
IJ编译器里有一个补丁叫做javatosmail可以看java对应smail代码
smail内的一些东西
比如写了一个main.java
然后main.java内有两个方法一个是main一个是main.modifyA()
第一个就是主函数定义a=123和string HELLO_WORLD="helloworld"
这里主函数就是定义a和helloworld而方法modifya是修改a=456
如果这个程序也就是两个函数转为smail就有了
四个函数(方法)
1.clinit
2.init
3.main
4.modifyA
1.clinit一般用于初始化比如把这个程序的string.helloworld初始化
.registers x 用x个寄存器
.line x 表示在源代码中第x行
const-string v0 这里就是初始化加载了常量string hello world

这里就是把v0对应到了main这个函数的string中
开头在smail中有.class public LMain对应就是main.java的main函数
2.init是对于main的构造函数
就是构造main的函数
在main中有一步int a=123这里构造时候对应上了就是
const/16 v0,0x7b(123)
input v0,p0,LMain;->a:I
这里v0是0x7b所以input v0还可以理解
然后这里p0说成员有this方法(应该是inta=123)对应有指针然后这个指针放在了p0中
Lmain也对应了class Main
这里a:I是smail的语法I对应是一个string类型
3.main函数
.registersx 还是调用x个寄存器
.invoke-direct {v0},LMain
这句对应是main函数下的Main main= new Main()
.invoke-virtual {v0},LMain;->modifyA
这对应了main.modifyA()

然后这就是对应的println
再往下就是返回了
smail了解一下就好
后续还是看jeb之类的好
草稿箱吃灰了很久放出来吧后面慢慢补
评论(0)
暂无评论