bhook
BHooK基础使用概念BHookBHook是一个PLT hook框架
PLT hookPLT hook即Procedure Linkage Table Hook,即利用ELF文件链接过程的特性,修改PLT链接的函数地址。
实现对指定函数进行hook的效果
Quick Start具体可见官网教程
具体步骤
导入依赖
Java/Kotlin依赖导入
Cpp依赖导入
初始化
Hook
Hook API
在讲解API以前,需要说明一点,BHook是一个PLT Hook框架。
PLT是一种Native Hook技术,也就是说Hook的是C/C++代码
Caller调用方
函数调用中主动调用函数的一方
Callee被调用方
函数调用中被调用的一方
如下:
其中functionA是Caller
functionB是Callee
12345678void functionA() { // invoke functionB();}void functionB() { // do some}
by ...
JNI基础
基础概念JNI是什么
JNI是Java的一种功能接口,全称叫Java Native Interface
为什么需要 JNI
Java 运行是借助 JVM 的,但是 JVM 其实只是一个 C/C++的”应用“(JVM 也需要在计算机上跑)
有时候我们可能需要比较底层的调用,比如涉及到 OS 的相关操作,JVM 其实是无法实现的,所以需要 JNI对接 C/C++
Demo编程语言中都流行 Hello World,JNI 的 Hello World 是?
笔者是一个 Android/Kotlin 开发者,所以具体 Demo 使用 Kotlin
Kotlin
12345678910111213141516171819202122232425class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { ...
Android NDK 项目报错
背景在学习 ART-TI 的过程中发现了GitHub 有一个项目
但是把项目拉下来以后发现会有报错
解决
确认报错原因
从报错中很容易得出是 NDK 的配置问题
NDK not configured.
配置 NDK(官网配置教程)
12# local.propertiesndk.dir=/Users/fool/Library/Android/sdk/ndk/18.1.5063045
新的问题
Invalid revision: 3.22.1-g37088a8
查了下是 cmake 不兼容的问题。
配置了一下 cmake 版本
12# local.propertiescmake.dir=/Users/fool/Library/Android/sdk/cmake/3.6.4111459
配置成功
CONFIGURE SUCCESSFUL in 1s
总结下NDK 工厂需要配置
SDK
cmake
NDK
frida基础配置
Frida 环境搭建背景
最近工作中需要逆向对比,调研学习中发现了 Frida 这么一个不错的框架
基础条件设备:root 手机
配置安装 pip 依赖1pip install frida-tools
安装 frida-serverrelease
选择合适的版本(Frida 可以对Android/IOS/Mac/Window/Linux进行逆向分析)
记得选择 frida-server
push到手机
本文主要是进行 Android 逆向环境搭建
如果是其他平台,请在指定的平台允许 server 脚本
Unzip
1tar -xvf frida-server-XX.xz
Push
1adb push frida-server /data/local/tmp/frida-server
设置权限
1chmod 777 /data/local/tmp/frida-server
执行 frida-server1/data/local/tmp/frida-server &
完成
环境搭建完成
数据库多表查询
多表查询连接
既然是多表查询不可避免就会用到多个表的数据。
From连接多表
如下连接了AB两个表
123select ......from A, Bwhere A.XX = B.XX
自连接
内连接 inner join
外连接
left join
1234select ......from Aleft join Bon XXXX
right join
1234select ......from Aright join Bon XXXXX
full join
1234select .....from Afull join Bon XXXXXX
嵌套子查询
及查询过程中内嵌一个查询
in
如果A的过滤条件需要用到另外一张表的数据。
123456select *from Awhere XX in ( select XX from B where condition)
exists
上方in等价,个人觉得适用于多过滤条件的情况
123456789select *from Awhere exists ( select * fro ...
ASM基础使用
ASMCore ApiClassVisitor123456789101112131415visit[visitSource][visitModule][visitNestHost][visitOuterClass](visitAnnotation|visitTypeAnnotation|visitAttribute)*(visitNestMember|[*visitPermittedSubclass]|visitInnerClass|visitRecordComponent|visitField|visitMethod)*visitEnd
visit
标记ClassVisitor开始
12345678override fun visit( version: Int, // 字节码版本号 access: Int, // 访问修饰符 name: String, // 类名称 signature: String?, // 泛型签名 superName: String, // 父类 interfaces: Array<out String& ...
常见的Unicode编码
基础概念编码
编码是计算机最为常见的一部分,他所解决的是计算机”不认识”人所使用的自然语言的问题。
解决的思路也很简单,我们利用了计算机只认01 2进制的特点,既然计算机认识数字,那么我们就给所有的字符排一个号,类似于:
a : 97
A : 65
……
这样计算机就知道每个字符是什么了
Unicode编码
Unicode一般指统一码。 统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
其实在Unicode之前经历过很多的编码,这里就默认大噶都有所了解啦~
ASCII、GB2312、BIG5、GBK
啥没听说?看看再来学呗~
Unicode是一种编码集,也就是前面所说的字符到数值的映射。
Map<Integer,Charactor>
Map<Charactor,Integer>
Unicode码点
即Unicode编码所对应的数值
关于Unicode编码范围
目前Unicode最大的码点为0x10FFFF
编码实现
Unicode只是一套规范,这套规范里面给出了, ...
从CPU的视角看函数调用
从CPU的视角看函数调用
函数调用这我熟啊——不就是将栈帧压入栈内吗
我还知道递归层次过多会导致StackOverflow呢,看吧举一反三多聪明!
那你知道最底层是如何实现函数调用的吗?整个函数调用的过程?
前言
如果想了解操作系统函数调用过程,我们从编程语言的角度上是很难看出什么端倪的,因为这一过程已经被封装地太死了
唯一的突破口既是汇编代码
接下来将使用一些调试工具对一段C语言函数调用对底层函数调用过程进行分析。
环境
WSL:
WSL 版本: 1.2.5.0内核版本: 5.15.90.1WSLg 版本: 1.0.51MSRDC 版本: 1.2.3770Direct3D 版本: 1.608.2-61064218DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hypWindows 版本: 10.0.22621.1702
OS Release
PRETTY_NAME=”Debian GNU/Linux 11 (bullseye)”NAME=”Debian GNU ...
Windows常见的编码问题
编码什么是编码”编码的诞生是带有一定场景和目的性的“
所谓场景既是需要用数字来表达信息的时候,很容易想到计算机,计算机只认01,恰好与之吻合。
目的就更好理解了,编码的出现就是为了解决01环境下无法表达信息的情况。
什么是编码问题直观的例子就是“鸡同鸭讲”
“鸡叫”是一种编码,“🦆叫”又是一种编码,他们属于不同的物种,语言不同即编码不兼容,就会出现双非都听不懂对方在说什么的情况。
(我不是什么小黑子,我只是单纯觉得这张图片好看)
放在实际情况来看,编码异常也就是,编码方和解码方采用不同的方式进行操作,导致双方得到的结果错误的情况,典型的如:
比如我编码采用GBK,解码采用UTF-8,就会出现如下问题:
Windows平台的编码问题就主流操作系统来看,Mac和Linux采用了UTF-8的编码,而Window却默认采用了GBK的编码。
而GBK对于UTF-8的中文解码是存在不兼容的。所以很容易出现乱码的情况。
如何解决Windows的编码问题一般发生编码异常的高发段(对于程序员)有如下:
源文件编码
编译器编码
终端编码
源文件编码容易理解,也就是代码的编码方式(代码本质就是纯文 ...
Java反射真的很耗时吗?
Reflection
自我学习Java起,带领我学习Java的学长都是会提醒我们——Java反射很耗时。
所以是真的很耗时吗?
不妨来测试一下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172package com.example.reflect;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Test { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, Inter ...