逆向工程 ——(1)

1. 函数调用的参数顺序与参数入栈时的参数顺序(逆序)相反

2. esp寄存器承担着栈顶指针的作用,而ebp寄存器负责行驶栈桢指针的职能。程序运行时,esp的值随之变化,访问栈中的局部变量、参数时,若以exp的值为基准编写程序会困难许多,使cpu难以引用到准确的地址,所以调用某函数时,先把函数起始地址的esp值保存到ebp中,并维持在函数内部。这样,无论esp如何变化,以ebp为基准能够安全访问函数的局部变量、参数、返回地址

    push ebp

    mov ebp,esp

    ......

    mov ebp,esp 

    pop ebp

    retn

3. main()函数使用该语句设置返回值

    xor eax,eax

    2个相同的值进行异或运算,结果为0。xor命令比mov eax,0 速度快,常用语寄存器初始化操作

4. Visual Basic文件特征

4.1 VB专用引擎

      VB文件使用MSVBMSVBVM60.dll的专用引擎

4.2 VB文件的启动代码

     执行程序后,在EP代码中首先做的是调用VB引擎的主函数(ThunRTMain()),找到EP的地址,通过push aaaaaa命令把RT_MainStruct结构体的地址压入栈。之后call bbbbbb命令调用到bbbbbb地址处的JMP DWORD PTR DS:[xxxxxx] 指令,该指令会跳转到VB引擎的主函数ThunRTMain()

4.2.1 VC++、VB中经常使用间接调用法,不是直接转到一个函数,而是通过中间的jmp命令跳转

4.3 &MSVBVM60.__vbaVarForInit()、&MSVBVM60.__vbaVarForNext()就像是在链表中使用next指针引用下一个元素一样,使逆向人员在字符串对象中逐个引用字符。并且设置loop count(ebx)

 

 

国庆回来已是废人。。。。。

你可能感兴趣的:(Re)