第二节 2.3找程序的入口 原文:https://www.showdoc.com.cn/fengxin1225/7054696489361869
控制台应用程序的main函数入口
在OD中找到以上其他中的函数,然后跟着3个参数的CALL就是main
例:
———————————————————-
第二节 2.4.1逆向并还原为C代码(网上解答)
逆向CallingConvention.exe,还原为C代码,记录过程。该程序可以自己去生成一个:
#include <iostream> #include<Windows.h> #include<stdio.h> int functionC(int a, int b) { return a + b; } int functionB(int a,int b,int c) { return a + b + c; } int functionA(int a, int b, int c, int d, int e) { int x, y; x = functionB(a, b, c); y = functionC(a, b); return y = functionC(x, y); } int main() { int result = functionA(1, 3, 4, 6, 7); printf("结果是:%d\n", result); system("pause"); }
程序入口
main函数
通过Main函数识别出来程序大致框架如下:
函数3为编译器自动添加的堆栈平衡检查函数
void __fastcall func1(int a,int b,int c,int d,int e){
}
void __cdecl func2(int x,int y){
}
void main(int argc,char *argv[])
{
func1(1,3,4,6,7);
func2(m,n);
}
func1函数
从以上汇编代码识别出func1的框架如下:
void __fastcall func1(int a,int b,int c,int d,int e){
int x=1;
int y=3;
func3(x,y,c);
func4();
func4();
}
func3函数
func3函数大致框架如下:
int __cdecl func3(int x,int y,it z)
{
return x+y+z;
}
func1函数补充如下:
void __fastcall func1(int a,int b,int c,int d,int e){
int x=1;
int y=3;
int z=func3(x,y,c);
func4(x,y);
func4();
}
func4函数
func4的函数框架如下:
int cdecl func4(int x.int y)
{
return x+y;
}
func1函数补充如下:
void __fastcall func1(int a,int b,int c,int d,int e){
int x=1;
int y=3;
int z=func3(x,y,c);
int p=func4(x,y);
func4(p,z); //运算后eax=0C
}
到此,func1基本逆向完成,回到main函数,继续func2的逆向,如下:
func2函数==》注意:这个是printf函数的汇编!
进到func2函数内部,发现其应该是printf函数,那么回到main函数,继续完善,如下:
Main函数
int cdecl func4(int x,int y)
{
return x+y;
}
void __fastcall func1(int a,int b,int c,int d,int e){
int x=1;
int y=3;
int z=func3(x,y,c);
int p=func4(x,y);
func4(p,z); //运算后eax=0C
}
void main(int argc,char *argv[])
{
printf("%d",func1(1,3,4,6,7));
}
上面的答案有瑕疵,比如函数返回值啥的void错误:
完善后代码如下:
#include <iostream> #include<Windows.h> #include<stdio.h> int functionC(int a, int b) { return a + b; } int functionB(int a,int b,int c) { return a + b + c; } int functionA(int a, int b, int c, int d, int e) { int x, y; x = functionB(a, b, c); y = functionC(a, b); return y = functionC(x, y); } int main() { int result = functionA(1, 3, 4, 6, 7); printf("结果是:%d\n", result); system("pause"); }
标签:func1,return,函数,func4,int,C语言,反汇编,main
From: https://www.cnblogs.com/bonelee/p/17278098.html