目标:最近做一个小项目,我这边要拦截并修改读卡器读到的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期)