boxmoe_header_banner_img

欢迎来到烨的世界~

加载中

文章导读

安卓re


avatar
liuye 2025年5月18日 80

基础?打包杂乱签名?

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)

查看评论列表

暂无评论


发表评论