├── README.md
├── trace
├── jnitrace-chame1eon
│ └── jnitrace
│ │ ├── jnitrace
│ │ ├── __init__.py
│ │ └── src
│ │ │ └── utils
│ │ │ ├── method_data.ts
│ │ │ ├── java_method.ts
│ │ │ └── types.ts
│ │ ├── MANIFEST.in
│ │ ├── requirements.txt
│ │ ├── tsconfig.json
│ │ ├── .eslintrc.json
│ │ ├── package.json
│ │ ├── LICENSE
│ │ ├── .travis.yml
│ │ ├── setup.py
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ └── README.md
├── frida-smali-trace-master
│ ├── frida_scripts
│ │ ├── .gitignore
│ │ ├── tsconfig.json
│ │ ├── agent
│ │ │ ├── logger.ts
│ │ │ ├── util.ts
│ │ │ ├── helper.ts
│ │ │ └── index.ts
│ │ ├── README.md
│ │ └── package.json
│ ├── .gitignore
│ ├── images
│ │ ├── Snipaste_2022-01-16_22-55-59.png
│ │ ├── Snipaste_2022-01-16_22-58-05.png
│ │ ├── Snipaste_2022-01-16_23-12-27.png
│ │ ├── Snipaste_2022-05-14_17-11-53.png
│ │ ├── Snipaste_2022-05-14_17-15-31.png
│ │ ├── Snipaste_2022-05-21_18-25-27.png
│ │ ├── Snipaste_2022-05-21_19-16-15.png
│ │ ├── Snipaste_2022-05-21_19-49-58.png
│ │ ├── Snipaste_2022-05-21_20-17-12.png
│ │ ├── Snipaste_2022-05-21_20-21-20.png
│ │ ├── Snipaste_2022-05-21_20-38-11.png
│ │ ├── Snipaste_2022-05-21_20-39-20.png
│ │ ├── Snipaste_2022-05-21_20-41-05.png
│ │ ├── Snipaste_2022-05-21_20-46-41.png
│ │ ├── Snipaste_2022-05-21_20-55-12.png
│ │ ├── Snipaste_2022-05-21_21-02-06.png
│ │ ├── Snipaste_2022-05-21_21-12-09.png
│ │ ├── Snipaste_2022-05-21_21-24-24.png
│ │ ├── Snipaste_2022-05-21_21-25-51.png
│ │ ├── Snipaste_2022-05-21_21-33-24.png
│ │ ├── Snipaste_2022-05-21_21-59-35.png
│ │ ├── Snipaste_2022-05-21_22-26-07.png
│ │ ├── Snipaste_2022-05-21_22-28-30.png
│ │ ├── Snipaste_2022-05-21_22-30-25.png
│ │ ├── Snipaste_2022-05-21_22-32-29.png
│ │ ├── Snipaste_2022-05-21_22-36-52.png
│ │ ├── Snipaste_2022-05-21_22-48-36.png
│ │ ├── Snipaste_2022-05-21_22-49-13.png
│ │ ├── Snipaste_2022-05-21_22-51-33.png
│ │ ├── Snipaste_2022-05-21_23-03-53.png
│ │ ├── Snipaste_2022-05-21_23-06-55.png
│ │ ├── Snipaste_2022-05-21_23-13-06.png
│ │ ├── Snipaste_2022-05-21_23-15-33.png
│ │ ├── Snipaste_2022-05-21_23-30-06.png
│ │ └── Snipaste_2022-05-21_23-50-43.png
│ └── README.md
├── r0tracer-main
│ ├── pic
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ ├── 04.png
│ │ └── 05.png
│ ├── README.md
│ └── r0tracer.js
├── raptor_frida_android_trace.js
└── raptor_frida_android_trace_fixed.js
├── .DS_Store
├── 脱壳
├── FRIDA-DEXDump
│ ├── requirements.txt
│ ├── screenshot.png
│ ├── setup.py
│ ├── frida_dexdump
│ │ ├── __init__.py
│ │ ├── agent.js
│ │ └── main.py
│ └── README.md
├── frida-unpack-master
│ └── frida-unpack-master
│ │ ├── inject.sh
│ │ ├── LICENSE
│ │ ├── OpenMemory.js
│ │ ├── README.md
│ │ └── frida_unpack.py
├── README.md
├── frida_dump-r0ysue
│ └── frida_dump
│ │ ├── dump_so.js
│ │ ├── README.md
│ │ └── dump_dex.js
├── unpack.js
└── unpackdex.js
├── 其他
├── .DS_Store
├── 查看内存中类的属性和具体参数
│ ├── .idea
│ │ ├── .gitignore
│ │ ├── misc.xml
│ │ ├── vcs.xml
│ │ ├── modules.xml
│ │ └── 查看内存中类的属性和具体参数.iml
│ └── 1.js
├── getintent查看内容
│ ├── .DS_Store
│ └── 1.js
├── 打印[object object]的具体类名
│ └── 1.js
├── 插件化apk替换classloader
│ └── 1.js
├── 打印常见数据结构
│ └── index.js
├── 栈回溯
│ └── 1.js
└── 不可见类名字符hook
│ └── 1.js
├── hook
├── Il2CppHookScripts-master
│ └── Il2CppHookScripts-master
│ │ ├── Il2cppHook(ts)
│ │ └── README.md
│ │ ├── imgs
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── hookc.png
│ │ ├── u3d_0.png
│ │ ├── u3d_1.png
│ │ ├── u3d_10.png
│ │ ├── u3d_2.png
│ │ ├── u3d_3.png
│ │ ├── u3d_4.png
│ │ ├── u3d_5.png
│ │ ├── u3d_6.png
│ │ ├── u3d_7.png
│ │ ├── u3d_8.png
│ │ └── u3d_9.png
│ │ ├── Others
│ │ ├── FTS
│ │ │ ├── README.md
│ │ │ ├── MD5_SHA.js
│ │ │ └── fts.js
│ │ └── IDAScript.py
│ │ ├── README.md
│ │ ├── Scripts
│ │ ├── README.md
│ │ ├── dps.py
│ │ └── bpoints.js
│ │ └── Il2cppHook
│ │ └── README.md
├── dlopen后第一时间劫持
│ └── exp.js
└── hook_libart脚本
│ ├── hook_registerNatives.js
│ ├── hook_artmethod.js
│ └── hook_art.js
├── antidebug
└── anti-tracepid
│ └── index.ts
└── objection使用
└── objection.md
/README.md:
--------------------------------------------------------------------------------
1 | 主要记录我在逆向时用到的一些脚本,主要是对别人脚本的整合
--------------------------------------------------------------------------------
/trace/jnitrace-chame1eon/jnitrace/jnitrace/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/frida_scripts/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 |
--------------------------------------------------------------------------------
/trace/jnitrace-chame1eon/jnitrace/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include jnitrace/build/jnitrace.js
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/.DS_Store
--------------------------------------------------------------------------------
/脱壳/FRIDA-DEXDump/requirements.txt:
--------------------------------------------------------------------------------
1 | click
2 | frida
3 | backports.shutil-get-terminal-size
--------------------------------------------------------------------------------
/其他/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/其他/.DS_Store
--------------------------------------------------------------------------------
/其他/查看内存中类的属性和具体参数/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/.gitignore:
--------------------------------------------------------------------------------
1 | *.so
2 | *.id0
3 | *.id1
4 | *.id2
5 | *.nam
6 | *.til
--------------------------------------------------------------------------------
/trace/jnitrace-chame1eon/jnitrace/requirements.txt:
--------------------------------------------------------------------------------
1 | frida>=14.0.5
2 | colorama
3 | hexdump
4 |
5 | pylint
6 |
--------------------------------------------------------------------------------
/其他/getintent查看内容/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/其他/getintent查看内容/.DS_Store
--------------------------------------------------------------------------------
/trace/r0tracer-main/pic/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/r0tracer-main/pic/01.png
--------------------------------------------------------------------------------
/trace/r0tracer-main/pic/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/r0tracer-main/pic/02.png
--------------------------------------------------------------------------------
/trace/r0tracer-main/pic/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/r0tracer-main/pic/03.png
--------------------------------------------------------------------------------
/trace/r0tracer-main/pic/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/r0tracer-main/pic/04.png
--------------------------------------------------------------------------------
/trace/r0tracer-main/pic/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/r0tracer-main/pic/05.png
--------------------------------------------------------------------------------
/脱壳/FRIDA-DEXDump/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/脱壳/FRIDA-DEXDump/screenshot.png
--------------------------------------------------------------------------------
/脱壳/frida-unpack-master/frida-unpack-master/inject.sh:
--------------------------------------------------------------------------------
1 | echo "Usage: ./inject.sh packageName xx.js"
2 |
3 | frida -U -f $1 -l $2 --no-pause
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/Il2cppHook(ts)/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # todo
4 |
5 | - 使用ts重写ufun.js
6 |
7 | 参见ts分支
8 |
9 |
10 |
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/1.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/2.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/3.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/hookc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/hookc.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_0.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_1.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_10.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_2.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_3.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_4.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_5.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_6.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_7.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_8.png
--------------------------------------------------------------------------------
/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/hook/Il2CppHookScripts-master/Il2CppHookScripts-master/imgs/u3d_9.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-01-16_22-55-59.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-01-16_22-55-59.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-01-16_22-58-05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-01-16_22-58-05.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-01-16_23-12-27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-01-16_23-12-27.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-14_17-11-53.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-14_17-11-53.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-14_17-15-31.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-14_17-15-31.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_18-25-27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_18-25-27.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_19-16-15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_19-16-15.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_19-49-58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_19-49-58.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-17-12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-17-12.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-21-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-21-20.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-38-11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-38-11.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-39-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-39-20.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-41-05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-41-05.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-46-41.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-46-41.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-55-12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_20-55-12.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-02-06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-02-06.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-12-09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-12-09.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-24-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-24-24.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-25-51.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-25-51.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-33-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-33-24.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-59-35.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_21-59-35.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-26-07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-26-07.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-28-30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-28-30.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-30-25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-30-25.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-32-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-32-29.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-36-52.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-36-52.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-48-36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-48-36.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-49-13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-49-13.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-51-33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_22-51-33.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-03-53.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-03-53.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-06-55.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-06-55.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-13-06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-13-06.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-15-33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-15-33.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-30-06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-30-06.png
--------------------------------------------------------------------------------
/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-50-43.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/20000s/frida-script-collection/HEAD/trace/frida-smali-trace-master/images/Snipaste_2022-05-21_23-50-43.png
--------------------------------------------------------------------------------
/其他/查看内存中类的属性和具体参数/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | frida -U -f7 | 8 |  9 | 10 | 11 | 12 | 13 | 14 | https://gtoad.github.io/2017/06/25/Android-Anti-Debug/ 15 | -------------------------------------------------------------------------------- /其他/查看内存中类的属性和具体参数/.idea/查看内存中类的属性和具体参数.iml: -------------------------------------------------------------------------------- 1 | 2 |-l hookC.js --no-pause 6 |
4 | 1. dps.py 5 | 6 | 主要用来为Il2CppDumper生成的script.json提供一个关键字搜索,并转换为地址与名称对应关系,便于bpoints.js使用 7 | 8 | 2. bpoints.js 9 | 10 | frida使用的js脚本,用到dlopen来获得加载时机,并注入断点 11 |12 | 13 | ###### python脚本的使用 14 |  "bpoints.js") 15 | 16 | cp上述结果到 bpoints.js 中替换对应的部分,再用frida去加载这段js即可批量断点以上函数 17 | 18 | ###### 添加对libil2cpp.so的函数断点 19 |  20 | 21 | ###### 点击按钮触发函数回调 22 |  23 | 24 | ###### 这三个暴力使用,容易崩,不建议使用 25 | HookExports,HookImports,HookSymbols 26 | -------------------------------------------------------------------------------- /antidebug/anti-tracepid/index.ts: -------------------------------------------------------------------------------- 1 | function hook_tridepid(){ 2 | var fgets_ptr = Module.getExportByName("libc.so","fgets"); 3 | var fgets = new NativeFunction(fgets_ptr,"pointer",["pointer","int","pointer"]); 4 | 5 | Interceptor.replace(fgets_ptr, new NativeCallback(function (buffer,n,filestream){ 6 | var ret = fgets(buffer,n,filestream); 7 | var line = buffer.readUtf8String(); 8 | if(line.indexOf("TracerPid") != -1){ 9 | console.log("hook gets " + line + "'"); 10 | buffer.writeUtf8String("TracerPid:\t0\n"); 11 | }else{ 12 | 13 | } 14 | return ret; 15 | },"pointer",["pointer","int","pointer"])); 16 | 17 | 18 | 19 | } -------------------------------------------------------------------------------- /trace/jnitrace-chame1eon/jnitrace/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parserOptions": { 3 | "project": "./tsconfig.json" 4 | }, 5 | "parser": "@typescript-eslint/parser", 6 | "plugins": [ 7 | "@typescript-eslint" 8 | ], 9 | "extends": [ 10 | "plugin:@typescript-eslint/all" 11 | ], 12 | "rules": { 13 | "@typescript-eslint/no-this-alias": [ 14 | "error", 15 | { 16 | "allowDestructuring": true, 17 | "allowedNames": ["self"] 18 | } 19 | ], 20 | "@typescript-eslint/prefer-readonly-parameter-types": "off", 21 | "@typescript-eslint/no-base-to-string": "off" 22 | } 23 | } -------------------------------------------------------------------------------- /其他/栈回溯/1.js: -------------------------------------------------------------------------------- 1 | function showStacks3(str_tag) 2 | { 3 | var Exception= Java.use("java.lang.Exception"); 4 | var ins = Exception.$new("Exception"); 5 | var straces = ins.getStackTrace(); 6 | 7 | if (undefined == straces || null == straces) 8 | { 9 | return; 10 | } 11 | 12 | console.log("=============================" + str_tag + " Stack strat======================="); 13 | console.log(""); 14 | 15 | for (var i = 0; i < straces.length; i++) 16 | { 17 | var str = " " + straces[i].toString(); 18 | console.log(str); 19 | } 20 | 21 | console.log(""); 22 | console.log("=============================" + str_tag + " Stack end=======================\r\n"); 23 | Exception.$dispose(); 24 | }; -------------------------------------------------------------------------------- /trace/jnitrace-chame1eon/jnitrace/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jnitrace", 3 | "version": "3.2.0", 4 | "description": "A tool for tracing use of the JNI in Android apps", 5 | "private": true, 6 | "main": "jnitrace/src/main.js", 7 | "scripts": { 8 | "prepare": "npm run build", 9 | "build": "frida-compile jnitrace/src/main.ts -o jnitrace/build/jnitrace.js -c", 10 | "watch": "frida-compile jnitrace/src/main.ts -o jnitrace/build/jnitrace.js -cw", 11 | "lint": "eslint jnitrace/src/**/*.ts" 12 | }, 13 | "dependencies": { 14 | "jnitrace-engine": "^1.1.0" 15 | }, 16 | "devDependencies": { 17 | "@types/frida-gum": "^16.2.0", 18 | "@types/node": "^14.14.5", 19 | "@typescript-eslint/eslint-plugin": "^2.27.0", 20 | "@typescript-eslint/parser": "^2.27.0", 21 | "eslint": "^6.8.0", 22 | "eslint-utils": "^2.0.0", 23 | "frida-compile": "^10.0.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /脱壳/frida_dump-r0ysue/frida_dump/dump_so.js: -------------------------------------------------------------------------------- 1 | function dump_so(so_name) { 2 | Java.perform(function () { 3 | var currentApplication = Java.use("android.app.ActivityThread").currentApplication(); 4 | var dir = currentApplication.getApplicationContext().getFilesDir().getPath(); 5 | var libso = Process.getModuleByName(so_name); 6 | console.log("[name]:", libso.name); 7 | console.log("[base]:", libso.base); 8 | console.log("[size]:", ptr(libso.size)); 9 | console.log("[path]:", libso.path); 10 | var file_path = dir + "/" + libso.name + "_" + libso.base + "_" + ptr(libso.size) + ".so"; 11 | var file_handle = new File(file_path, "wb"); 12 | if (file_handle && file_handle != null) { 13 | Memory.protect(ptr(libso.base), libso.size, 'rwx'); 14 | var libso_buffer = ptr(libso.base).readByteArray(libso.size); 15 | file_handle.write(libso_buffer); 16 | file_handle.flush(); 17 | file_handle.close(); 18 | console.log("[dump]:", file_path); 19 | } 20 | }); 21 | } -------------------------------------------------------------------------------- /trace/jnitrace-chame1eon/jnitrace/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 chame1eon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /脱壳/frida-unpack-master/frida-unpack-master/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Nishanth Shanmugham 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /脱壳/frida-unpack-master/frida-unpack-master/OpenMemory.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /** 3 | * 此脚本在以下环境测试通过 4 | * android os: 7.1.2 32bit (64位可能要改OpenMemory的签名) 5 | * legu: libshella-2.8.so 6 | * 360:libjiagu.so 7 | */ 8 | Interceptor.attach(Module.findExportByName("libart.so", "_ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_"), { 9 | onEnter: function (args) { 10 | 11 | //dex起始位置 12 | var begin = args[1] 13 | //打印magic 14 | console.log("magic : " + Memory.readUtf8String(begin)) 15 | //dex fileSize 地址 16 | var address = parseInt(begin,16) + 0x20 17 | //dex 大小 18 | var dex_size = Memory.readInt(ptr(address)) 19 | 20 | console.log("dex_size :" + dex_size) 21 | //dump dex 到/data/data/pkg/目录下 22 | var file = new File("/data/data/xxx.xxx.xxx/" + dex_size + ".dex", "wb") 23 | file.write(Memory.readByteArray(begin, dex_size)) 24 | file.flush() 25 | file.close() 26 | }, 27 | onLeave: function (retval) { 28 | if (retval.toInt32() > 0) { 29 | /* do something */ 30 | } 31 | } 32 | }); -------------------------------------------------------------------------------- /trace/jnitrace-chame1eon/jnitrace/.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | python: 4 | - 3.6 5 | 6 | install: 7 | - pip install -r requirements.txt 8 | - pip install . 9 | - nvm install 12.7.0 10 | - npm install 11 | 12 | before_script: 13 | - touch jnitrace/build/__init__.py 14 | 15 | script: 16 | - pylint jnitrace/jnitrace.py 17 | - npm run lint 18 | 19 | deploy: 20 | provider: pypi 21 | user: chame1eon 22 | password: 23 | secure: PkNiWyAivXABjKf0Qhf6tTboiEfbELApF7FYbpbEW1jwZ8+L9xcjVyUqfKFV/KXC4BBjp5x0vsL7T0O89A1+puzxIMFDvT8Gr/DXTNGQqcAzSsJv4k5X8VD8bgfCpj3rP4SpdfosDsYmwqFSZxkTLTPkSsggybNVCYocfYR5/aWW9XXzFBFld4AJ0LmqvUSMhxjAC5aekWYRjhqLJO2fs2tLmQn1ClPAi6c6d++aM9Q5SnTEA91kh/EXOcGvME3DLQ6v/DlefqjFlQ3ncanJ93cnjbNnRf2kah7gW4Hcq9/9aS6XyHAr6e5fq7QD1DlC6qJiY0m91Q1OcGCZwWiVfcrrJTotQj3ObAMQv5s//My36ge2uduuByXPsQ4++RUmTpFScCcI1obmsJs4jL97lc/sdes6phaUallx5XUxTFgYLBiHtD5eCkn4TAM3a4HWpC7IlN5C95cBMg6/5BhYKpKsEFCb8KOMviDP5xYJ4VgEyUSf7wTcmg+ZI61LJnwnGT67gZ64EMM05d3zAp0oEg1yVZ0v285knn0bneJQVBh3N4JUiFnDzdxVlA1En327EFZ4FLsKmSZlplhlAKF8BdGjWTbNM3Q/Q8HxYbhyUmGNMuxqsZ7YmJp4IwgV7TmUOiRfTL9AITUPmUrQbMkLNUhI92nR8VDbmyeT/JhgY58= 24 | skip_cleanup: true 25 | skip_existing: true 26 | on: 27 | tags: true 28 | -------------------------------------------------------------------------------- /其他/不可见类名字符hook/1.js: -------------------------------------------------------------------------------- 1 | //来自http://91fans.com.cn/post/findclassname/#gsc.tab=0 2 | // 这个包下的类都遍历出来,这样不就可以知道这个类名的UTF-8 编码的转义了吗? 3 | Java.enumerateLoadedClasses({ 4 | onMatch: function(className) { 5 | if(className.indexOf('com.google.android.material.tooltip') >=0 ){ 6 | console.log(className.toString()); 7 | console.log(encodeURIComponent(className.toString())); 8 | } 9 | }, 10 | onComplete:function(){ 11 | } 12 | }); 13 | 14 | // decodeURIComponent hook 15 | var hookCls = Java.use(decodeURIComponent('com.google.android.material.tooltip.%DB%A4%DB%A4%DB%9F%DB%A6')); 16 | //遍历方法名 17 | //var hookCls = Java.use(decodeURIComponent('com.google.android.material.tooltip.%DB%A4%DB%A4%DB%9F%DB%A6')); 18 | var methods = hookCls.class.getDeclaredMethods(); 19 | 20 | for (var i in methods) { 21 | console.log(methods[i].toString()); 22 | console.log(encodeURIComponent(methods[i].toString().replace(/^.*?\.([^\s\.\(\)]+)\(.*?$/, "$1"))); 23 | } 24 | 25 | //Hook这个成员函数的代码 26 | hookCls[decodeURIComponent("%DB%9F%DB%A3%DB%A5%DB%9F%DB%A3")] 27 | .implementation = function () { 28 | console.log("m1344 =============== "); 29 | return "xxx"; 30 | 31 | } -------------------------------------------------------------------------------- /objection使用/objection.md: -------------------------------------------------------------------------------- 1 | objection连接: 2 | 3 | usb: objection -g 包名 explore 4 | 5 | 搜加载的so文件:memory list modules 6 | 7 | 查看库的导出函数:memory list exports libssl.so 8 | 9 | 在内存堆中搜索与执行:android heap search instances xxx.xxx.xxx.类名 10 | 11 | 调用 android heap execute 堆地址 方法名 12 | 13 | 在实例上执行js代码: android heap evaluate 堆地址 后就可以输入js 14 | 15 | 启动activity或者service android intent launch_activity 包名.活动名 16 | 17 | 查看当前可用的activity android hooking list activities 18 | 19 | 查看可用的services service: android hooking list services 20 | 21 | 启动service android intent launch_service 包名.活动名 22 | 23 | 列出内存中所有的类:android hooking list classes 24 | 25 | 内存中搜索所有的类: android hooking search classes 关键词 26 | 27 | 内存中搜索所有的方法:android hooking search methods 关键词 28 | 29 | 列出类的所有方法 : android hooking list class_methods 类名 30 | 31 | hook类的所有方法 : android hooking watch class 类名 32 | 33 | hook方法的参数,返回值和调用栈 : android hooking watch class_method 方法名 --dump-args --dump-return --dump-backtrace 34 | 35 | hook 方法的所有重载 : objection自动加载 36 | 37 | 暴力搜索所有dalvik.system.DexClassLoader : **android** **heap** **search** **instances** **dalvik**.system.DexClassLoader 38 | 39 | 暴力搜内存: memory search "64 65 78 0a 30 33 35 00" 40 | 41 | 把它拷贝下来 : memory dump from_base 地址 大小 文件名 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /其他/getintent查看内容/1.js: -------------------------------------------------------------------------------- 1 | Activity["getIntent"].implementation = function() { 2 | let result = this["getIntent"](); 3 | var tmp = result.getExtras() 4 | if(tmp != null) { 5 | console.log("---------------- bundle contents--------------------") 6 | console.log("getintent :data " + result.getData() + " " + this) 7 | console.log("getintent.getExtras : " + tmp) 8 | console.log('---Bundle contents:---'); 9 | var keySet = tmp.keySet(); 10 | var iterator = keySet.iterator(); 11 | while (iterator.hasNext()) { 12 | var key = iterator.next(); 13 | var value = tmp.get(key); 14 | console.log(key + ': ' + value); 15 | if(value != null){ 16 | if(value.toString().indexOf("Bundle") != -1) { 17 | console.log(value + '---Bundle contents:---'); 18 | var value12 = Java.cast(value,Java.use('android.os.Bundle')) 19 | var keySet1 = value12.keySet(); 20 | var iterator1 = keySet1.iterator(); 21 | while (iterator1.hasNext()) { 22 | var key1 = iterator1.next(); 23 | var value1 = value12.get(key1); 24 | console.log(key1 + ': ' + value1); 25 | } 26 | console.log(value + '---Bundle contents end---'); 27 | } 28 | } 29 | } 30 | console.log("---------------- bundle content end--------------------") 31 | } 32 | return result 33 | } 34 | -------------------------------------------------------------------------------- /脱壳/frida-unpack-master/frida-unpack-master/README.md: -------------------------------------------------------------------------------- 1 | # frida-unpack 2 | 基于Frida的脱壳工具 3 | ## 0x0 frida环境搭建 4 | frida环境搭建,参考frida官网:[frida](https://www.frida.re)。 5 | 6 | ## 0x2 原理说明 7 | 利用frida hook libart.so中的OpenMemory方法,拿到内存中dex的地址,计算出dex文件的大小,从内存中将dex导出。 8 | ps:查看OpenMemory的导出名称,可以将手机中的libart.so通过adb pull命令导出到电脑,然后利用: 9 | `nm libart.so |grep OpenMemory`命令来查看到出名。 10 | 其中android 10为`/apex/com.android.runtime/lib/libdexfile.so`方法为`OpenCommon`。 11 | 12 | ## 0x3 脚本用法 13 | - 在手机上启动frida server端 14 | - 执行脱壳脚本 15 | ``` 16 | 执行./inject.sh 要脱壳的应用的包名 OpenMemory.js 17 | ``` 18 | - 脱壳后的dex保存在`/data/data/应用包名/`目录下 19 | 20 | ## 0x4 脚本测试环境 21 | 此脚本在以下环境测试通过 22 | * android os: 7.1.2 32bit (64位可能要改OpenMemory的签名) 23 | * legu: libshella-2.8.so 24 | * 360: libjiagu.so 25 | 26 | ## 0x5 参考链接 27 | - [frida](https://www.frida.re) 28 | 29 | ## 0x06 python脚本支持 30 | `python frida_unpack.py 应用包名` 31 | 32 | ## 0x07 相关技巧 33 | - 利用`c++filt`命令还原C++ name managling之后的函数名 34 | 35 | ``` 36 | c++filt _ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_ 37 | 38 | 输出: 39 | art::DexFile::OpenMemory(unsigned char const*, unsigned int, std::__1::basic_string
29 | /** 30 | * -------------------------------------------------------------------------------------------- 31 | * 常用 32 | * --------------------- 33 | * i() list_Images() 34 | * c() list_Classes(image,isShowClass) // 遍历调用 35 | * C() list_Classes(imgOrPtr) // 反射调用 36 | * m() list_Methods(klass,isShowMore) 37 | * f() listFieldsFromCls(klass) 38 | * F() find_method(ImageName,ClassName,functionName,ArgsCount,isRealAddr) 39 | * n() nopfunction(ptr) 40 | * nn() cancel nopfunction(ptr) 41 | * nnn() cancel all nop/replace function 42 | * d() Interceptor.detachAll() / d(mPtr) detach mPtr 43 | * a() addBreakPoints(imgOrCls) 44 | * b() breakPoint(mPtr) 45 | * P() printCtx(pointer,range) 46 | * B() breakPoints(filter) 47 | * D() detachAll and reset arrays 48 | * p() print_list_result(filter) 49 | * -------------------------------------------------------------------------------------------- 50 | * 拓展方法 51 | * --------------------- 52 | * HookSetActive() 53 | * HookOnPointerClick() 54 | * HookPlayerPrefs() 55 | * HookDebugLog() 56 | * HookLoadScene() 57 | * HookGetSetText() 58 | * PrintHierarchy() 59 | * getUnityInfo() 60 | * getApkInfo() 61 | * GotoScene(str) 62 | * callFunction(mPtr,arg0,arg1,arg2,arg3) 63 | * SeeTypeToString(obj) 64 | * FuckKnownType(strType,mPtr) 65 | * Toast(msg) 66 | * getLibPath() 67 | * print_deserted_methods() 68 | * 69 | * --- 用作动态Hook去掉指定gameObj 70 | * setClick() 71 | * HideClickedObj() 72 | * HookMotionEvent() 73 | * 74 | * --- 查看对象 75 | * showEventData(eventData) 76 | * showTransform(transform) 77 | * showEventData(eventData) 78 | * 79 | * --- 修改属性 80 | * destroyObj(gameObj) 81 | * setActive(gameObj,visible) 82 | * setPosition(mTransform,x,y,z) 83 | * setLocalScale(mTransform,x,y,z) 84 | * setLocalPosition(mTransform,x,y,z) 85 | * setLocalRotation(mTransform,x,y,z,w) 86 | * ---------------------------------------------------------------------- 87 | * SharedPrefs | 88 | * ---------------------------------------------------------------------| 89 | * SetInt(key,value) | SetFloat(key,value) | SetString(key,value) | 90 | * GetInt(key) | GetFloat(key) | GetString(key) | 91 | * ---------------------------------------------------------------------- 92 | * PS: 分清楚 MethodInfo,Transform,GameObject 指针类型, 调用函数的时候不要瞎传参数 93 | * 如果使用了gadgat,使用-FU先把应用跑起来再进行注入该脚本, 整个脚本对spawn方式启动的兼容性不好 94 | * -------------------------------------------------------------------------------------------- 95 | */ 96 |97 | 98 | ``` 99 | // 2021.2.7f1c1 100 | // typedef struct MethodInfo { 101 | // Il2CppMethodPointer methodPointer; 102 | // Il2CppMethodPointer virtualMethodPointer; 103 | // InvokerMethod invoker_method; 104 | // const char * name; 105 | // Il2CppClass * klass; 106 | // const Il2CppType * return_type; 107 | // const Il2CppType ** parameters; 108 | 109 | ** 遇到不可用的时候 MethodInfoOffset 可尝试修改为 0x0 / 0x1 ** 110 | var MethodInfoOffset = 0x0 111 | ``` 112 | 113 | 114 | ### 用例 115 | 1. **list_Images() === i()** 116 | 117 |  118 | 119 | 2. **list_Classes(image,isShowClass) === c()** 120 | 121 |  122 | 123 | 3. **list_Methods(klass,isShowMore) === m()** 124 | 125 |  126 | 127 |  128 | 129 | 4. **find_method(ImageName,ClassName,functionName,ArgsCount,isRealAddr) === f()** 130 | 131 |  132 | 133 | 5. **addBP(imgOrCls) === a()** 134 | 135 |  136 | 137 | 6. **breakPoints(filter) === B()** 138 | 139 |  140 | 141 | 7. **breakPoint(ptr) === b()** 142 | 143 |  144 | 145 | 8. **Interceptor.detachAll() === d()** 146 | 147 | 9. **HookOnPointerClick()** 148 | 149 |  150 | 151 | 10. **Info()** 152 | 153 |  154 | 155 | 10. **FindObjectsOfType()** 156 | 157 |  158 | 159 | .... 160 | -------------------------------------------------------------------------------- /脱壳/frida_dump-r0ysue/frida_dump/dump_dex.js: -------------------------------------------------------------------------------- 1 | function get_self_process_name() { 2 | var openPtr = Module.getExportByName('libc.so', 'open'); 3 | var open = new NativeFunction(openPtr, 'int', ['pointer', 'int']); 4 | 5 | var readPtr = Module.getExportByName("libc.so", "read"); 6 | var read = new NativeFunction(readPtr, "int", ["int", "pointer", "int"]); 7 | 8 | var closePtr = Module.getExportByName('libc.so', 'close'); 9 | var close = new NativeFunction(closePtr, 'int', ['int']); 10 | 11 | var path = Memory.allocUtf8String("/proc/self/cmdline"); 12 | var fd = open(path, 0); 13 | if (fd != -1) { 14 | var buffer = Memory.alloc(0x1000); 15 | 16 | var result = read(fd, buffer, 0x1000); 17 | close(fd); 18 | result = ptr(buffer).readCString(); 19 | return result; 20 | } 21 | 22 | return "-1"; 23 | } 24 | 25 | function dump_dex() { 26 | var libart = Process.findModuleByName("libart.so"); 27 | var addr_DefineClass = null; 28 | var symbols = libart.enumerateSymbols(); 29 | for (var index = 0; index < symbols.length; index++) { 30 | var symbol = symbols[index]; 31 | var symbol_name = symbol.name; 32 | //这个DefineClass的函数签名是Android9的 33 | //_ZN3art11ClassLinker11DefineClassEPNS_6ThreadEPKcmNS_6HandleINS_6mirror11ClassLoaderEEERKNS_7DexFileERKNS9_8ClassDefE 34 | if (symbol_name.indexOf("ClassLinker") >= 0 && 35 | symbol_name.indexOf("DefineClass") >= 0 && 36 | symbol_name.indexOf("Thread") >= 0 && 37 | symbol_name.indexOf("DexFile") >= 0 ) { 38 | console.log(symbol_name, symbol.address); 39 | addr_DefineClass = symbol.address; 40 | } 41 | } 42 | var dex_maps = {}; 43 | 44 | console.log("[DefineClass:]", addr_DefineClass); 45 | if (addr_DefineClass) { 46 | Interceptor.attach(addr_DefineClass, { 47 | onEnter: function (args) { 48 | var dex_file = args[5]; 49 | //ptr(dex_file).add(Process.pointerSize) is "const uint8_t* const begin_;" 50 | //ptr(dex_file).add(Process.pointerSize + Process.pointerSize) is "const size_t size_;" 51 | var base = ptr(dex_file).add(Process.pointerSize).readPointer(); 52 | var size = ptr(dex_file).add(Process.pointerSize + Process.pointerSize).readUInt(); 53 | 54 | if (dex_maps[base] == undefined) { 55 | dex_maps[base] = size; 56 | var magic = ptr(base).readCString(); 57 | if (magic.indexOf("dex") == 0) { 58 | var process_name = get_self_process_name(); 59 | if (process_name != "-1") { 60 | var dex_path = "/data/data/" + process_name + "/files/" + base.toString(16) + "_" + size.toString(16) + ".dex"; 61 | console.log("[find dex]:", dex_path); 62 | var fd = new File(dex_path, "wb"); 63 | if (fd && fd != null) { 64 | var dex_buffer = ptr(base).readByteArray(size); 65 | fd.write(dex_buffer); 66 | fd.flush(); 67 | fd.close(); 68 | console.log("[dump dex]:", dex_path); 69 | 70 | } 71 | } 72 | } 73 | } 74 | }, onLeave: function (retval) { 75 | } 76 | }); 77 | } 78 | } 79 | 80 | var is_hook_libart = false; 81 | 82 | function hook_dlopen() { 83 | Interceptor.attach(Module.findExportByName(null, "dlopen"), { 84 | onEnter: function (args) { 85 | var pathptr = args[0]; 86 | if (pathptr !== undefined && pathptr != null) { 87 | var path = ptr(pathptr).readCString(); 88 | //console.log("dlopen:", path); 89 | if (path.indexOf("libart.so") >= 0) { 90 | this.can_hook_libart = true; 91 | console.log("[dlopen:]", path); 92 | } 93 | } 94 | }, 95 | onLeave: function (retval) { 96 | if (this.can_hook_libart && !is_hook_libart) { 97 | dump_dex(); 98 | is_hook_libart = true; 99 | } 100 | } 101 | }) 102 | 103 | Interceptor.attach(Module.findExportByName(null, "android_dlopen_ext"), { 104 | onEnter: function (args) { 105 | var pathptr = args[0]; 106 | if (pathptr !== undefined && pathptr != null) { 107 | var path = ptr(pathptr).readCString(); 108 | //console.log("android_dlopen_ext:", path); 109 | if (path.indexOf("libart.so") >= 0) { 110 | this.can_hook_libart = true; 111 | console.log("[android_dlopen_ext:]", path); 112 | } 113 | } 114 | }, 115 | onLeave: function (retval) { 116 | if (this.can_hook_libart && !is_hook_libart) { 117 | dump_dex(); 118 | is_hook_libart = true; 119 | } 120 | } 121 | }); 122 | } 123 | 124 | 125 | setImmediate(hook_dlopen); 126 | -------------------------------------------------------------------------------- /trace/frida-smali-trace-master/README.md: -------------------------------------------------------------------------------- 1 | # frida-smali-trace 2 | 3 | 通过frida hook追踪所有smali指令执行情况 4 | 5 | 在Pixel4 Android 11下运行【64位】APP进行测试,版本号`RQ3A.210805.001.A1` 6 | 7 | 效果示意 8 | 9 |  10 | 11 | 实现过程 12 | 13 | - [纯frida实现smali追踪](https://blog.seeflower.dev/archives/84/) 14 | 15 | # 使用 16 | 17 | ## 命令示意 18 | 19 | ```bash 20 | frida -U -n LibChecker -l _agent.js -o trace.log 21 | ``` 22 | 23 | 如果使用frida 15之前的版本,`-n`后面是包名 24 | 25 | ```bash 26 | frida -U -n com.absinthe.libchecker -l _agent.js -o trace.log 27 | ``` 28 | 29 | ## 准备工作 30 | 31 | 安装库,并进行编译测试 32 | 33 | ``` 34 | cd frida_scripts 35 | npm install 36 | npm run watch 37 | ``` 38 | 39 | 如果只是简单使用,那么后面都不用管 40 | 41 | --- 42 | 43 | 在正式使用此脚本之前,需要先找到关键位置,以及几个关键寄存器 44 | 45 | 从手机中提取libart.so 46 | 47 | ```bash 48 | adb pull /apex/com.android.art/lib64/libart.so 49 | ``` 50 | 51 | 用IDA打开libart.so,让IDA反汇编 52 | 53 | 将`index.ts`中的`hook_mterp`改为`false` 54 | 55 | 在`trace_interpreter_enrty`的`ExecuteSwitchImplCpp`日志打印中添加`${offset}` 56 | 57 |  58 | 59 | 开启frida-server,运行命令注入脚本,具体APP请自行选择 60 | 61 |  62 | 63 | 随便滑动、点击下APP,脚本会给出一个偏移位置,比如我这里是`0x169d48` 64 | 65 | IDA中按`G`,`粘贴`地址,`回车`跳转,就会进入到其中一个`ExecuteSwitchImplCpp`实现 66 | 67 | 按`F5`查看伪代码 68 | 69 |  70 | 71 | 往下翻,找到第一个while处,按`TAB`键跳转到汇编窗口 72 | 73 |  74 | 75 | 然后检查特征,关键特征是和`0xFF`相与,以及`BR`指令 76 | 77 |  78 | 79 | 特征确定后,那么记录下此处的偏移,比如我这里是`0x169EB4` 80 | 81 | 和`0xFF`相与的是`opcode`,而`opcode`是从`inst(Instruction)`取的 82 | 83 | 根据这个规则,可以推测图中`X28`是`opcode`,`X26`是`inst` 84 | 85 | 现在回到函数开头,将`a1`命名为`ctx`,其偏移`16`也就是两个指针大小(64位下就是2 * 8 = 16)的取值就是`shadow_frame`,那么对应寄存器在后续也是`shadow_frame`,我这里是`x19` 86 | 87 |  88 | 89 | 现在将`index.ts`中的`trace_interpreter_switch`注释取消掉,把上面分析得到的`0x169EB4`、`x19`、`x26`对应修改 90 | 91 | ```JavaScript 92 | // 参数二是 while 循环中 inst 赋值给 next 的偏移 93 | // 参数三是存 shadow_frame 的寄存器 94 | // 参数四是存 inst(Instruction) 的寄存器 95 | trace_interpreter_switch(libart, 0x169EB4, 'x19', 'x26'); 96 | ``` 97 | 98 | 然后将`hook_switch`和`hook_mterp`改为`false`,编译新的js,进行测试 99 | 100 | 如果没有问题,现在IDA搜索`ExecuteMterpImpl`,跳转到对应函数,按F5查看伪代码,应该长这样 101 | 102 | 第一个参数是`thread` 103 | 104 |  105 | 106 | 按`TAB`查看汇编代码,看看`x0`给哪个寄存器了,我这里是`x22`,记录下来,那么`x22`就是`thread` 107 | 108 |  109 | 110 | 然后直接在汇编窗口往下翻,找一个符号是`mterp_op_`开头的代码(除了`mterp_op_nop`) 111 | 112 | 然后找一个和`0xFF`相与的寄存器,再往几行前看下是哪个寄存器读取来的,比如我这和`0xFF`相与的是`x23`,`x23`是由`x20`读取来的,那么`x20`就是`inst` 113 | 114 |  115 | 116 | 现在将`index.ts`中的`trace_interpreter_mterp_op`注释取消掉,把上面分析得到的`x22`、`x20`对应修改 117 | 118 | ```JavaScript 119 | // 参数二是存 thread 的寄存器 120 | // 参数三是存 inst(Instruction) 的寄存器 121 | trace_interpreter_mterp_op(libart, "x22", "x20"); 122 | ``` 123 | 124 | 编译新的js,进行测试 125 | 126 | 如果顺利,那么现在能够trace 64位APP的smali执行详情了 127 | 128 | 如果检查找后面的参数太麻烦,也可以注释掉`trace_interpreter_switch`和`trace_interpreter_mterp_op` 129 | 130 | 将`hook_switch`和`hook_mterp`改为`true`,这样只会做简单的trace 131 | 132 | --- 133 | 134 | 如果通过静态分析的方法无法确定寄存器,可以自行修改脚本,打印全部寄存器情况 135 | 136 | 比如要检查`switch`在`while`处的`shadow_frame`是哪个寄存器,修改代码如下 137 | 138 | ```JavaScript 139 | // main 140 | let hook_switch = true; 141 | let hook_mterp = false; 142 | trace_interpreter_enrty(libart, hook_switch, hook_mterp); 143 | // trace_interpreter_enrty ExecuteSwitchImplCpp 日志添加一个 ${shadow_frame} 144 | log(`[switch] ${Process.getCurrentThreadId()} ${shadow_frame} ${offset} ${method_name} ${inst_str}`); 145 | // trace_interpreter_switch 146 | log(`[${id}] [switch] ${JSON.stringify(ctx)}`); 147 | ``` 148 | 149 | `trace_interpreter_switch`只打印寄存器信息日志 150 | 151 |  152 | 153 | 这样也能定位出`shadow_frame`存在哪个寄存器,确定后再修改`trace_interpreter_switch`具体参数,还原代码 154 | 155 |  156 | 157 | 类似的,将关键代码修改如下,测试查看`thread`是在哪个寄存器 158 | 159 | ```JavaScript 160 | // main 161 | let hook_switch = false; 162 | let hook_mterp = true; 163 | trace_interpreter_enrty(libart, hook_switch, hook_mterp); 164 | // trace_interpreter_enrty ExecuteMterpImpl 日志添加一个 ${args[0]} 165 | log(`[mterp] ${Process.getCurrentThreadId()} ${args[0]} ${method_name} ${inst_str}`); 166 | // trace_interpreter_mterp_op 只打印一个指令的 避免过多输出 167 | if (symbol.name != "mterp_op_move") continue; 168 | // hook_mterp_op 169 | log(`[${id}] [mterp] ${JSON.stringify(ctx)}`); 170 | ``` 171 | 172 |  173 | 174 |  175 | 176 | --- 177 | 178 | 还有一个问题,需要确定`thread`中`managed_stack`的偏移 179 | 180 | 但是`managed_stack`在`Thread`中的偏移就比较麻烦了,主要是因为`Thread`比较复杂 181 | 182 | 经过一番查阅后,发现在`art::StackVisitor::WalkStack`里面有调用`GetManagedStack()` 183 | 184 | - `void art::StackVisitor::WalkStack<(art::StackVisitor::CountTransitions)0>(bool)` 185 | 186 |  187 | 188 | 并且这个函数的符号还在,于是结合源代码,和IDA对比便能知道`GetManagedStack()`实际的偏移 189 | 190 | 注意这个偏移每个版本、手机的可能都不同,比如我这里是`184`也就是`0xB8` 191 | 192 |  193 | 194 | 确定偏移之后记得修改`get_shadow_frame_ptr_by_thread_ptr`里面计算`managed_stack`的偏移 195 | 196 | --- 197 | 198 | 注意,由于hook指令详细情况的位置里入口可能太近,除了上面的测试过程,其他时候 199 | 200 | - 使用了 trace_interpreter_switch 则 hook_switch 应当为 false 201 | - 使用了 trace_interpreter_mterp_op 则 hook_mterp 应当为 false 202 | 203 | 如果感兴趣详细实现过程,请查看[纯frida实现smali追踪](./纯frida实现smali追踪.md) -------------------------------------------------------------------------------- /trace/raptor_frida_android_trace.js: -------------------------------------------------------------------------------- 1 | /* 2 | * raptor_frida_android_trace.js - Code tracer for Android 3 | * Copyright (c) 2017 Marco Ivaldi