逆向工程小知识

在VB中:
vbaVarForInit() , vbaVarForNext() 可以使逆向分析人员在字符串对象中逐个引用字符。 后面可以跟loop count (EBX) 使其按指定次数运转循环

MSVBVM50.rtcMsgBox  \\调用消息框

入口点:
调试器载入程序后停止的地方为入口点,它是一段EP(EntryPoint,入口点)代码,其中最引人注意的是CALL 和 JMP 两个命令

EP:
EP是windows可执行文件(EXE,DLL,SYS等)的代码入口点,是执行应用程序时最先执行的代码的起始位置,它依赖于CPU

查找main函数的方法:
简单有效:F7,F8查看函数 (一些经验就是可以通过注释区的注释直接步过一些函数列如一些winAPI)

大本营:
为了重复加载程序方便,我们可以在一些地方下断点防止一些麻烦(就比如不用一次次的找main函数)

  1. GOTO 命令(Ctrl+G)然后 F4
  2. 设置断点
  3. 加上注释(快捷键 ; )
  4. 加上标签 (快捷键 : )

快速查找指定代码的四种方法:

  1. 代码执行法
  2. 字符串检索法
  3. API检索法(1):程序没有压缩器/保护器的保护 用All intermodular calls 生成API函数列表
  4. API检索法(2):存在(1)中情况 此时DLL代码库被加载到内存后,我们可以直接向DLL库中添加断点 (快捷键Alt + M 打开内存映射窗口可以查看一些进程内存和USER32库的加载情况),同时 Name in all modules可以列出所被加载的DLL文件中提供的API

函数调用约定:
cdecl:
调用者直接清理其压入栈的函数参数
stdcall:
一个使用例子

#include "stdio.h"
int _stdcall add(int a ,int b)
{
    return a+b;
}
int main()
{
    return add(1,2);
}

这种方式是用被调用函数自己清理栈,其汇编结尾 一般用 RETN+一个数字(栈大小)
fastcall:
与stdcall方式基本相似,但是该方式通过使用寄存器(而非栈内存)去传递那些需要传递给函数的部分参数(前两个)一般为ECX,EDX

  • 逆向工程中函数调用的返回值一般保存在eax中,在程序call指令之后一般就会有对eax寄存器的处理,这一点可以用来判断函数的用途和结构
  • .逆向工程中确定函数参数多少的方法:

    进入函数后可以看到它栈空间中存储的返回地址,通过该返回地址你可以找到调用该函数的起始地址,然后可以分析在进入函数体前后的栈空间大小来确定参数多少
    
  • 一些逆向可能会直接在程序内部存在注册码,可以通过找到注册码错误的字符串确定比较注册码正确与否的函数,而在改函数的附近一般会存在正确的注册码。


   转载规则


《逆向工程小知识》 时钟 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
glibc heap House of Spirit glibc heap House of Spirit
这个技术也是针对于fastbin,属于fastbin_attack的一种。关键:目标位置伪造fastbin chunk并将其释放,进而实现在指定地址分配chunk 关于free时候的检查: free检查会看size的低字节flag的IS_
2019-08-03
下一篇 
glibc heap UAF glibc heap UAF
use after free(UAF) 重新malloc一样的大小,会拿到曾经Free的chunk,此时就会有两个指针p,和q指向同一个内存块,使用这两个的指针操作混在一起(之前的哪个指针在chun被free后没有被置为NULL,形成悬空
2019-08-02
  目录