首页
社区
课程
招聘
[旧帖] [讨论]想要给MessageBox装个钩子,搞不定啊 0.00雪花
发表于: 2012-4-9 20:52 1310

[旧帖] [讨论]想要给MessageBox装个钩子,搞不定啊 0.00雪花

2012-4-9 20:52
1310
目标:最近做一个小项目,我这边要拦截并修改读卡器读到的ID号,让读卡器那边显示出来的ID号是错误的。不能直接修改源码,要模拟远程攻击。

思路:我看过RFID读卡程序源码,就是从OUR_MIFARE.dll中调用一个叫iccreadex的读卡函数,然后返回数组mypiccserial就是我们要篡改的ID号。一些重要的代码如下:

[DllImport("OUR_MIFARE.dll", EntryPoint = "piccreadex")]

static extern byte piccreadex(byte ctrlword, byte[] serial, byte area, byte keyA1B0, byte[] picckey, byte[] piccdata0_2);
        //参数:说明
     //serial:卡序列号数组,用于指定或返回卡序列号

private void btReadCardId_Click(object sender, EventArgs e)
        {
            byte status;//存放返回值
        …………
        …………
        byte[] mypiccserial = new byte[4];//卡序列号  

status = piccreadex(myctrlword, mypiccserial, myareano, authmode, mypicckey, mypiccdata);
        //调用完 piccreadex函数可读出卡序列号到 mypiccserial
     //处理返回函数
            switch (status)
            {
                case 0:  //返回值为0 ,则一切正常
                    MessageBox.Show("该卡ID号:" + ByteArrayToHexString(mypiccserial), "卡ID");
                    break;
                case 8:  //返回值为8 ,则读不到卡
                    MessageBox.Show("请将卡放在感应区","错误");
                    break;
            }
        }
我希望能够在MessageBox.Show()之前装个钩子,然后把mypiccserial里面的ID号处理一下,再Show出来。
遇到的问题:1.我在设OD消息断点时候,老是说“无法读取调试进程的内存”
2.我 bp messageboxW,可是断点分析了很久,CAll了很多次,居然又回来的原来的起点。
求大侠们帮忙看看啊~~~

————————————————————————以下更新——————————————————————————
今天用OD载入,BP MessageBoxW。
7674EA5F >  8BFF            mov     edi, edi
7674EA61    55              push    ebp
7674EA62    8BEC            mov     ebp, esp
7674EA64    833D 749A7576 0>cmp     dword ptr [76759A74], 0
7674EA6B    74 24           je      short 7674EA91
7674EA6D    64:A1 18000000  mov     eax, dword ptr fs:[18]
7674EA73    6A 00           push    0
7674EA75    FF70 24         push    dword ptr [eax+24]
7674EA78    68 A49E7576     push    76759EA4
7674EA7D    FF15 34146F76   call    dword ptr [<&KERNEL32.InterlockedCompareExchange>] ; KERNEL32.InterlockedCompareExchange
7674EA83    85C0            test    eax, eax
7674EA85    75 0A           jnz     short 7674EA91
7674EA87    C705 A09E7576 0>mov     dword ptr [76759EA0], 1
7674EA91    6A 00           push    0
7674EA93    FF75 14         push    dword ptr [ebp+14]
7674EA96    FF75 10         push    dword ptr [ebp+10]
7674EA99    FF75 0C         push    dword ptr [ebp+C]
7674EA9C    FF75 08         push    dword ptr [ebp+8]
7674EA9F    E8 49FFFFFF     call    MessageBoxExW

7674EAA4    5D              pop     ebp
7674EAA5    C2 1000         retn    10
发现运行完7674EA9C    FF75 08         push    dword ptr [ebp+8] 后堆栈窗口出现

0036EA04   001905CC  ? .      |hOwner = 001905CC ('RFID演示系统',class='WindowsForms10.Window.8.app.0...')
0036EA08   01774B74  tKw    |Text = ""B8,"每",A8,"ID号:62 8E F1 12 "
0036EA0C   0176D730  0譾   |Title = "?,A8,"ID"
0036EA10   00000000  ....      |Style = MB_OK|MB_APPLMODAL
0036EA14   00000000  ....      \LanguageID = 0 (LANG_NEUTRAL)

其中ID号:62 8E F1 12,就是我需要拦截并修改的内容,接下去应该怎么做呢?
在7674EA9C    FF75 08         push    dword ptr [ebp+8]下面CALL到自己的DLL,然后运用钩子的思想??
请问这个ID号是放在ebp里面的吗??

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
偌大一个论坛,怎么木有人指教一下的啊?
今天试图找存储ID号,也就是mypiccserial的寄存器。可是也找不到。我的OD的数据面板内容都是0.为什么呢??
2012-4-10 09:33
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我希望能够在MessageBox.Show()之前装个钩子,然后把mypiccserial里面的ID号处理一下,再Show出来。
//////
为何需要钩子呢?直接在函数前处理ID号不就可以了。
2012-4-10 09:44
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
    因为不能直接修改源码,要模拟远程攻击的场景。就是注入DLL来修改EXE,不就是钩子的思想么?我是这么想的,如果有更简单的办法还请赐教啊~~
2012-4-10 11:19
0
游客
登录 | 注册 方可回帖
返回
//