加载中,请稍等...

E盾反调试分析

  1. GetStartupInfo 在程序启动后,会有一个StartupInfo的结构体变量,来保存程序启动的信息,我们通过其中参数的改变来检测程序是正常运行还是在调试器中运行的

参考地址:https://www.cnblogs.com/ziolo/p/3434815.html

参考地址:https://blog.csdn.net/tk86935367/article/details/8174368

x64(学习笔记) - 3(x64InlineHook)

inlineHook 过程

  1. 选择hook方式
  2. 获取hook地址(如果是导入表的函数注意jmp)
  3. 计算hook掉的字节(汇编引擎 / 手动计算)
  4. 保存要被替换掉的汇编,计算被替换掉字节下一行的地址
  5. 构建hook shellcode
  6. shellCode替换掉目标地址的代码(为了不破坏原有寄存器,需要保存当前寄存器,火哥推荐的是 构建的shellcode 使用asm push所有寄存器 然后提升栈顶 调用自己的函数 恢复栈顶 然后pop)
  7. 构建调用原函数的 shell code, 执行被替换掉的汇编,然后jmp到之前存储的地址

要点

  • 因为原有call都是相对偏移,如果hook call相关的 比较麻烦
  • 不能直接hook 函数的地址 因为可能会有jmp跳转,直接调用的函数的地址 可能不是函数头是jmp
    需要使用GetModuleHandleA 然后再GetProcAddress 获取到函数地址

注意

x64(学习笔记) - 1(函数逆向)

要点

  • 在x64默认下不使用rbp寻址,使用rsp寻址

  • 在x64下栈是静态的栈,函数开头会默认开辟好所有的栈
    20200825172443

  • 栈帧 - 栈顶 到 栈底的高度

  • x64中栈帧是静态的,默认就开辟好了

  • 在x64中 修改rsp 可能是 sub 也可能是 lea

  • 在x64中 堆栈回溯 需要计算rsp 来回溯堆栈

  • 在x64中 ret 一般都没有参数 因为栈是静态默认开辟好的

  • 48位有效地址有多少有效内存呢?2^48=40000G

x64(学习笔记) - 1(汇编)

要点

  1. 在x64中对32位的寄存器(比如eax,ebx)操作的时候(xor and mov 等)会影响64位的寄存器 。在x64中 mov eax,0x1 和 mov rax,0x1 俩个汇编的相等的 —零拓展
  2. x64寻址和x32寻址不一样 call offset =call goto address - rip
  3. x64中 没有pushad pushaq 有 pushfq(eflags); push cs, push ds 也没有了

xposed 原理初探

一、Xposed 框架实现 Hook 的原理介绍
Zygote是Android的核心,每运行一个app,Zygote就会fork一个虚拟机实例来运行app,
Xposed Framework深入到了Android核心机制中,通过改造Zygote来实现一些很牛逼的
功能。Zygote的启动配置在init.rc 脚 本 中,由系统启动的时候开启此进程,对应的
执行文件是/system/bin/app_process,这个文件完成类库加载及一些函数调用的工作。
当系统中安装了Xposed Framework之后,会对app_process进行扩展,也就是说,Xposed
Framework 会拿自己实现的app_process覆盖掉Android原生提供的app_process文件,
当系统启动的时候,就会加载由 Xposed Framework 替换过的进程文件,并且,Xposed
Framework 还定义了一个 jar 包,系统启动的时候,也会加载这个包:
/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar

二、Xposed框架运行的条件
1.Rooted Device / Emulator (已root的手机或者模拟器)
2.Xposed Installer (Xposed安装程序下载)
3.Hooking Android App (要被Hook的目标 App)

Xposed Framework就是一个apk包也就是上面下载的Xposed安装程序,下载后用下面
的命令安装到手机上或者模拟器:
adb install de.robv.android.xposed.installer_v32_de4f0d.apk

app
framework
C++
linux内核

linux内核 –> init –> app_process –> Zygote

  

:D 一言句子获取中...