关于HOOK API的recv、send函数的简单问题(50分)

  • 主题发起人 主题发起人 sunnybaby
  • 开始时间 开始时间
S

sunnybaby

Unregistered / Unconfirmed
GUEST, unregistred user!
我HOOK了API的recv和send函数,使应用程序在调用recv和send函数时先调用我的函数,在我的函数myrecv和mysend中对数据进行处理后再调用真正的recv和send,部分代码如下
Library Hook;
.....
{---------------------------------------}
{函数功能:Send函数的HOOK
{函数参数:同Send
{函数返回值:integer
{---------------------------------------}
function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
//数据处理
MessageBeep(1000);
//调用直正的Send函数
WriteProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
Result := OldSend(S, Buf, len, flags);
JmpCode.Address := @MySend;
WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize);
end;

{---------------------------------------}
{函数功能:Recv函数的HOOK
{函数参数:同Recv
{函数返回值:integer
{---------------------------------------}
function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
begin
//数据处理
MessageBeep(1000);
//调用直正的Recv函数
WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
Result := OldRecv(S, Buf, len, flags);
JmpCode.Address := @MyRecv;
WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);
end;
...
我是个小菜菜,我的问题是:我如何知道应用程序传过来的var buf参数的类型,并以十六进制的格式保存在文件中或显示在其它可编辑控件中,如果我要编辑buf应该用什么函数呢?
我试过在MySend函数中声明一个text(还有Tinifile也试过)文件,将string(buf)写入文件,应用程序执行的时候会异常退出。
注:按上面的代码执行应用程序运行正常,在收发数据包时也可以响一声。
 
var buf的结果是将Buf的地址传入(作为变参),你可以用Pointer去获得并操作它,如果要将它按任何类型去操作,只要进行类型转换即可.例如:PByte(),PChar(),PByteArray()等
 
最快的**方法!
有钱大家赚
相信我,试试。。有钱嫌哦!
跟我学赚钱吧,给你个大惊喜!! 信不信由你!
  本来我也不相信的,但我试过之后,是真的能赚到钱,我就赚到了300多美金。因为本意
是试试罢了,试了一个月,没有着力去发表多少,所以才300美金。但300多美金已经有人民

2000多了,哈哈!后来我就又发表了好多,赚得也多。
  难道天下竟有免费的午餐?答案是--没有。
  所以有很多人就会不相信我这里所写的话,因此,我特地在这里注明一下:这不是免费
的,但也不用交钱和什么的,只要为这个网站介绍和招人加入。这些就是工作,这就是赚钱


  为什么能赚钱呢?理由很简单,我们帮这个网站作广告、宣传出去,那就有人来这个网
站浏览,那申请加入的人也就越来越多,这个网站就兴旺起来了。这是它所希望和欢迎的,

就要奖励你!每加入一个人有0.8美金。
  怎么能够赚钱呢?加入了会员后,要多发表,就能够赚钱。怎么发表呢?就是把本文复
制,然后到各个网站的留言版上粘贴发表宣传。有人加入了,你就有钱赚了;加入的人越多

你赚的钱也越多。好了,以下是本人的经历和加入的向导--
  本人是刚从大学毕业,刚工作不久。因为公司能够上网,所以我一有时间就是上网了。
在网上我发现了一个问题:
  为什么各个网站都说能为你赚到很多钱呢,就连读一封 E-mail 点几回广告栏都能挣到
钱?
  难以置信啊!天下哪有免费的午餐?!(后来才弄清是广告商买单,越多人看,广告商
越肯付钱)本来我也是不相信的,可呆着实在是无聊啊。反正闲着也是闲着!但我的身份是

能够泄露给外人的,当然身份证号码、手机号码(因为回电是要付钱的噢)、信用卡号码等

重要信息都不能泄露的噢。于是找了一个不要身份证、不要会员费,只要有个地址、电话号

就能挣到钱的网站,申请成了会员……(反正挣不到钱也不会吃亏,哼!)
  等了一个月,什么汇款单?连个影子都没有!不过一想,无所谓了,反正也没吃亏!就当
是鬼迷心窍一回吧!--哈哈!
  可一直到了第二个月……
  突然,汇款单到了!不看不知道,一看吓一跳!--300多美金?折合人民币不就是2000多
了吗?
  半信半疑。到了银行,交了几十元的手续费,换回了2000多!真像做梦一样……
  买了一些一直想买的东东,这时我才确信不疑。兴奋之余,又开始了我的宣传。不是宣
传得越多,挣的也就越多吗?
  果然,三个月后,又飞来了一张单子!
  --1300多美金!
  真是难以置信!!
  又过了三个月上涨到了2400多美金。
  如今,不用上班也有钱花了,真是乐哉乐哉乐乐哉!
  你不信?那没办法!只可惜这白花花的银子喽。
  不过,古人云:“宁可信其有,不可信其无”啊!
  反正也不吃亏,就当疯一回试试看嘛!
  相信我,没错的!
  加入方法很简单的哦:
http://www.pointsmoney.com/
  进入上面网站(如若点击不成,复制、粘贴到地址栏。有时候进不去,那是因为服务器
太忙,你可以在凌晨人少时再去!)
  打开网页,点击左方菜单的第一个Sign Up。
  进去后,就要填你的资料了(也不是什么重要的资料)。
  然后,跟着提示,一步一步输入信息就OK了。下面是英文的解释:
  USER ID (Valid Email): 填你的电子邮箱
  Password : 密码,你自己想一个吧
  Confirm Password : 确认你的密码,再打一次你的密码
  Friend Refferal ID : 这里填421510501(注:其实这里的意思是:填介绍人的ID4215
10501,就是本人的ID)。我看过和我同样发表文章赚钱的人,他们没有在这说明这个ID的意
思,他们只有说,要这样填呀,否则……的。在此,我和你们说明白.
  填完后,这个网站就会发一个Email给你,这个Email里面就有一个新的ID是你的,以后
你就用你得到的这个ID去招人。其实也不用特别地去招,像我这样,发表文章,教人申请加

不就能赚钱了吗?例:你现在用421510501申请,包括写完以下还有的资料。这样全部完成后
,我就得到0.8美金。(注:在这条里填421510501,即填我的ID)
  好了,现在点击 Submit 。好,申请完了。现在,你就去你的电子邮箱,这个网站发给
你一个Email。去看,在Email中间有一条长长的网址(例:它给我的Email中间http://www.pointsmoney.com/userprofile.php?auid=269126152&ID=243484
。上面这个
是给我的网址,而给你们的是不同的。每个人都不同,你上它给你的网址就得了。进去后,

着,再次输入资料。
  下面是我为了方便大家的加入,详细说明了加入过程中的细节(注:一定要用拼音打字
呀,不然申请不了的):
  First Name: 名字(例:海玲 就打 HaiLing)
  Last Name: 姓 (例:张 就打 Zhang )
  Address: 家庭住址(写拼音,一定要详细填写,包括我省略号后面省略掉的内容,不然
收不到汇款单喽!例:广东省……,就打GuongDongSheng…)
  City: 城市 (例:深圳市,就打ShenZhenShi)
  Zip/Postal Code: 邮编 ( 填你的,例518112 )
  State: 填 No
  Country: 国家(选 China--应该都是中国人吧, 如果没China即中国可选,你可随意选
一个国家,把China填在State里或在Address里详细写明)
  Phone: 电话号码 ( 国家代码 86 + 区位号的电话号码 例: 86-0769-2458070
  Fax: 可不填
  Mobile: 可不填
  Gender: 性别 Male(男); Femaie (女)
  Do you have Credit Card: 你有信用卡吗?(选No吧)
  Age: 你几岁(你自己选吧)
  Profession: 你的职业是什么?(自己选吧)
  Monthly Lncome: 你每月的收入是多少?(自己选吧)
  Do you have Web Site: 你有个人网站吗?(没有就不填)
  好,填完,点击 Submit
  接着就是选择爱好兴趣(本人全选,你看着办吧)。
  加入完毕后,它就出现一个登陆框,如果你就登陆了,网站就送0.41美金给你。所以,
最好是申请完成后登陆一次吧,这样就得到0.41美金了。登陆(LOGIN)时你只需填入你的电子
邮箱,然后在下一栏输入密码就可以了。
  然后,就是赚钱之法了。
  赚钱的方法:
  到各个网站的留言板中,把本文内容全部复制、粘贴进去!多多益善噢! :)
  只要有人点,你就可以挣钱了!多好啊!而且反正赚的是外国人的钱,广告商的钱不赚
白不赚!
  好了,祝你赚钱呀!不,应该是大家一起赚呀!^v
 
to:mcmtv
你真NB,广告做到我屁屁底下,我靠!
 

http://www.delphibbs.com/delphibbs/dispq.asp?lid=2367407

 
to txing:
应用程序异常退出。
编辑16进制数据用什么函数啊
 
不会吧,问了两天了,没人解决,50分送不出去了啊!再问一个别的吧
如何判断PWordArray类型数据的数组边界啊?我要把它存入文件
......
tmp:Pwordarray;
myfile : text;
begin
tmp := pwordarray(buf);
assignfile(myfile,'c:/temp.txt');
append(myfile);
for i:= 0 to high(tmp) do//编译出错,是high(tmp)不对,请高手更正,谢谢
writeln(myfile,inttostr(tmp));
close(myfile);
end
......
 
to: sunnybaby
这样不行吗:
var
ss:string;
........
.........
setlength(tmp,len);
move(buf,tmp[1],len);
AssignFile(myfile,'c:/temp.txt');
Append(myfile);
ss:='';
for i:= 1 to len do
begin
ss:=ss+inttohex(ord(tmp))+' ';
if (i mod 16)=0 then
begin
writeln(myfile,ss);
ss:='';
end;
end;
if ss<>'' then
writeln(myfile,ss);
CloseFile(myfile);
..........
 
to Txing:
有一条错误:ss:=ss + inttohex(ord(tmp)) + '';
there is no overloaded verson of 'IntToHex' that to be called with these arguments.
如果用inttostr可以正常运行,但我要16进制
 
搞定了,加个参数2就行了
 
后退
顶部