glibc
认识Glibc概念
Glibc
glibc是linux下面c标准库的实现,即GNU C Library
和java的jdk,kotlin的stdlib类似。
查看我们所用的glibc版本
123➜ glibc getconf GNU_LIBC_VERSION# 输出glibc 2.31
关于陌生
我们其实对Glibc特别特别陌生,主要是当我们点开一些C语言的基础调用的时候,我们是看不了具体的源代码的。
所以就这样Glibc在我们心里越来越模糊,黑盒化
编译Glibc
认识Glibc的最好的方法就是编译它。打一个包,如果可以还可以装到Linux系统上自己用。
官方文档
下载下载地址
为了可玩性,笔者下载了最新版的Glibc
glibc-2.38.tar.gz
1234567891011# 下载➜ glibc curl -O https://mirror.koddos.net/gnu/libc/glibc-2.38.tar.gz# 解压➜ glibc tar -xvf glibc-2.38.tar.gz# check下是否安装完成➜ glibc lltot ...
WSL Mirrored NetworkMode
WSL镜像网络背景
在做一个安全试验的过程中:
需要将本机作为一个服务器与外部网络进行交互。
WSL默认是NAT的模式,无法实现于外网交互的逻辑。
Vmware作为虚拟机可以配置网络的状态为bridge,作为虚拟机的WSL是否也可以呢?
配置
修改.wslconfig文件
1234networkingMode=mirroreddnsTunneling=truefirewall=trueautoProxy=true
关闭wsl
1wsl --shutdown
重新进入wsl
参考链接知乎
WSL官网
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 ...













