首页
社区
课程
招聘
[求助]能否以反汇编状态更改指定的函数参数的值
发表于: 2005-2-3 12:01 4851

[求助]能否以反汇编状态更改指定的函数参数的值

2005-2-3 12:01
4851
小第有个问题不是很明白,

就是,当把一个程序反汇编之后,能不能更改指定API函数参数的值

比如,原程序的 MessageBox 的函数,参数是这样的

MessageBox( NULL , "test" , "123" , MB_OK );

我想把他的参数改为 MessageBox( NULL , "test" , "456" , MB_OK );

就是把 “123” 改为 "456" 行么?

行的话,在哪里改,一般是改哪个寄存器?如何改?

望给出例子。。。。谢谢了。。。。小弟刚接触反汇编不久,很多东西不明白,望各位大哥指教。。。。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你说的这个123,456是弹出对话框的大小的值,这个应该是在资源里改的吧.
2005-2-3 13:15
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
3
123,456是弹出对话框的大小的??
2005-2-3 14:07
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
4
messagebox:
http://www.myf1.net/rmh/homepage/class/mcc16_messageb.htm

messageboxa:
1、函数原型:
int __fastcall MessageBox(const char * Text, const char * Caption, int Flags = 0x0);
Flags表示对话框的按钮组合,取值有:
/*
* MessageBox() Flags
*/
#define MB_OK                       0x00000000L
#define MB_OKCANCEL                 0x00000001L
#define MB_ABORTRETRYIGNORE         0x00000002L
#define MB_YESNOCANCEL              0x00000003L
#define MB_YESNO                    0x00000004L
#define MB_RETRYCANCEL              0x00000005L
#if(WINVER >= 0x0500)
#define MB_CANCELTRYCONTINUE        0x00000006L
#endif /* WINVER >= 0x0500 */

#define MB_ICONHAND                 0x00000010L
#define MB_ICONQUESTION             0x00000020L
#define MB_ICONEXCLAMATION          0x00000030L
#define MB_ICONASTERISK             0x00000040L

#if(WINVER >= 0x0400)
#define MB_USERICON                 0x00000080L
#define MB_ICONWARNING              MB_ICONEXCLAMATION
#define MB_ICONERROR                MB_ICONHAND
#endif /* WINVER >= 0x0400 */

#define MB_ICONINFORMATION          MB_ICONASTERISK
#define MB_ICONSTOP                 MB_ICONHAND
2、这个函数的返回值有:
/*
* Dialog Box Command IDs
*/
#define IDOK                1
#define IDCANCEL            2
#define IDABORT             3
#define IDRETRY             4
#define IDIGNORE            5
#define IDYES               6
#define IDNO                7
3、范例:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  file://AnsiString是标准的字符串型变量
  AnsiString ss1;
  AnsiString ss2;
  ss1="文件已修改,要保存吗?" ;
  ss2="提示对话框二";
  Application->MessageBoxA("文件已修改,要保存吗?","提示对话框一",MB_ICONQUESTION+MB_YESNO);
  if(Application->MessageBoxA(ss1.c_str(),ss2.c_str(),MB_ICONHAND+MB_YESNO)==IDYES)
  {
   ShowMessage("你按了确定键");
  }
  //////////////////////////////////////
  AnsiString ss;
  ss="多行提示示例:";
  ss=ss+"\n第一行";
  ss=ss+"\n第二行";
  ss=ss+"\n第三行";
  Application->MessageBoxA(ss.c_str(),"提示",MB_ICONEXCLAMATION+MB_YESNO)  ;

}
2005-2-3 14:14
0
雪    币: 225
活跃值: (146)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
找到一个有空隙的节,用16进制,写入字符串“456”,记下文件偏移,在改参数,压入这个新地址
2005-2-3 14:18
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
6
如果修改,直接找到“123”,改成“456”就可以呀
2005-2-3 14:22
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
静态改数据
动态改堆栈
2005-2-3 15:12
0
雪    币: 241
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
最初由 killl 发布
如果修改,直接找到“123”,改成“456”就可以呀


会在数据段里直接有123 存在的么?

是用 IDA 还是 用 W32DSM 反汇编修改啊?
2005-2-3 18:06
0
雪    币: 296
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
9
用od,一般会先入栈,改一下就好了
2005-2-3 18:10
0
雪    币: 241
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
最初由 Winter-Night 发布
用od,一般会先入栈,改一下就好了


OD是OLLYDBG么?

小第昨天入行,菜的不行,问的问题也菜,见笑了。。。。

谢谢大哥的回复。。。。
2005-2-3 18:18
0
游客
登录 | 注册 方可回帖
返回
//