ndk
学习目的:学会ndk编程编写基本c代码so中常用的log输出//引入头文件#include<android/log.h>//第一个参数为日志等级,第二个参数为tag,第三个参数为输出文本__android_log__print(int prio, const char* tag, const char* text);//为了方便起见,通常这样定义#define LOGD(......) __android_log__print(ANDROID_LOG_DEFAULT, TAG, __VA_ARGS__)
NDK多线程创建多线程//线程id,其实就是longpthread_t thread;//线程id 线程属性 函数 传递pthread_create(&thread, nullptr, myThread, nullptr);//等待线程执行完毕//默认的线程属性是joinable随着主线程结束而结束//线程属性是dettah,可以分离执行pthread_join(thread, nullptr);//子线程中使用它来退出线程pthread_exit(0)
传参 ...
frida的Python库使用
学习目标:了解frida的python库的使用为什么需要使用frida的python库
之前介绍的frida更多是用于手工调试阶段,如果要用代码自动化处理,还需要其他语言介入,比如python爬虫
后续介绍的frida算法转发方案的rpc也需要使用python,算法转发和rpc能给逆向带来无比便捷的体验
frida可以实时与python进行数据交互,可以把数据发送给python,等待python处理完后,接收返回值,frida再接着往下执行代码
python提供的各种库,让代码编写更为简单
包名注入# -*- coding: UTF-8 -*-import frida, sysjsCode = """ Java.perform(function(){ var RequestUtil = Java.use('com.dodonew.online.http.RequestUtil'); RequestUtil.encodeDesMap.overload('java.lang.Strin ...
某些app的逆向实战
x圈目标:逆向分析出其登录数据包中的各种字段抓包分析
发现了有一个加密字段codeSign
跑一下java层自吐算法脚本
Java.perform(function () { function showStacks() { console.log( Java.use("android.util.Log") .getStackTraceString( Java.use("java.lang.Throwable").$new() ) ); } function logOutPut(msg) { Java.use("android.util.Log").d("xiaojianbang", "frida inject: " + msg); } var By ...
frida脚本开发
学习目标:能够使用frida开发出简单的脚本,hook系统函数工具函数的封装Java.perform(function () { function showStack(){ var log = Java.use("android.util.Log"); var throwable = Java.use("java.lang.Throwable"); console.log(log.getStackTraceString(throwable.$new())); } var ByteString = Java.use("com.android.okhttp.okio.ByteString"); function toBase64(tag, data) { console.log(tag + " Base64: ", ByteString.of(data).base64()); } ...
frida相关API详解
学习目标:熟练使用frida对Java层代码进行hook静态方法和实例方法的hook
不需要管修饰符,不需要区分静态和实例方法,都是使用Java.use
Java.perform(function(){ var money = Java.use("com.xiaojianbang.hook.Money"); money.getInfo.implementation = function () { var result = this.getInfo(); console.log("money.getInfo result: ", result) return result; } money.setFlag.implementation = function (a) { console.log("money.setFlag param: ", a); return this.setFlag(a); ...
Java层关键代码快速定位
学习目标:能使用frida快速定位到关键代码函数调用栈的打印function showStacks(){ var Log = Java.use("android.util.Log"); var Throwable = Java.use("java.util.Throwable"); console.log(Log.getStackTraceString(Throwable.$new()))}
常用系统关键函数java.util.HashMapputJava.perform(function(){ function showStack(){ var log = Java.use("android.util.Log"); var throwable = Java.use("java.lang.Throwable"); console.log(log.getStackTraceString(throwa ...
app的简单防护
学习目标:了解一些app的防护措施,能对自己写的app做一些简单防护反编译一个app时搜索不到关键字
HTML5的App
字符串被加密了
反射调用相关类
动态加载dex
热修复
简单的字符串加密的实现dex的字符串加密可以用代码自动实现,需要使用到dexlib2这个库
若是不加任何防护,在登陆操作时,我们将密码发送给服务器,攻击者再抓包后直接反编译然后搜索password便可以定位到关键代码
package com.example.encrypt;import android.os.Build;import android.os.Bundle;import androidx.activity.EdgeToEdge;import androidx.appcompat.app.AppCompatActivity;import androidx.core.graphics.Insets;import androidx.core.view.ViewCompat;import androidx.core.view.WindowInsetsCompat;import java.security. ...
逆向分析dodonew
目标:得到”Encrypt”的算法逆向的步骤
抓包分析是否有需要逆向的字段
查壳分析是否有加固
查看界面元素,看是否是原生开发的app,以为不同形式app分析方法不一样
跑一下自吐算法插件
Hook常用系统函数来定位
找到一些疑似的函数,可以利用hook打印堆栈,来看是否调用了这些函数
关键加密代码的定位
人肉手工搜索字符串
可以搜索连接
可以搜索加密的函数
可以搜索同一个数据包中没有加密的参数名
使用查壳工具发现没有壳,抓包发现有一个加密字段:
"Encrypt": "NIszaqFPos1vd0pFqKlB42Np5itPxaNH\/\/FDsRnlBfgL4lcVxjXii\/UNcdXYMk0EQMz15fWd0AZ3\n9d4qc0ZgtMCbKF+l+FsXvqFFi4HhQ8Z56cxaZpXIUEhJ5R9IBRCtI97HMUH8l2PmJT4N+mA\/k2lT\nUTN+8LjHbtYGerEukUyVhjQHzeMCIEFbLVavcACyOG7MZVeYVISwA3hNO+DU7\/YXdymd3vpf ...
frida环境搭建
学习目标:配置好frida环境frida的安装pip install fridapip install frida-tools (安装frida-tools时,会自动安装frida)
判断frida是否安装成功cmd中执行frida --version, 能打印出版本号说明frida-tools没有问题cmd中执行python, 进入控制台import frida, 能导包成功,说明frida库没有问题
frida的卸载pip uninstall fridapip uninstall frida-tools
frida安装指定版本先安装指定版本的frida,再安装指定版本的frida-tools
pip install frida==14.2.18pip install frida-tools==9.2.5旧版的要下载.egg文件然后安装D:\Python38\python.exe -m easy_install frida-14.2.18-py3.8-win-amd64.egg
frida-tools版本的查看
https://github.com/frida/frida/r ...

