Delphi - XP扫雷外挂制作.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi - XP扫雷外挂制作

Delphi - XP扫雷外挂制作. 技术交流,DH讲解. 本来之前就在写这个文章,还写了War3挂的教程,后来因为一些事就没有弄了. 现在过年在家又没有事就继续把这个写完吧.哈哈. 不要以为写个挂很容易,要想写个挂肯定要了解游戏呀. 我们现在来了解下地雷是怎么产生的? 其实只是我自己猜想的,毕竟这个游戏不是我写的... 1 用户选择了多大的棋盘,多少地雷后 棋盘应该是用一个二维数组来存储的,地雷数肯定是用一个全局变量来存储的.这点儿有异议没有? 没有我就继续往下说了... 2 生成地雷,肯定是随机的,那么一定会调用Rand函数咯. a.首先判断地雷数是否为0 ---是0-结束生成过程 ????? | ?? 不是0 ????? | b.Rand产生X,Rand产生Y?????????????????????????????????????? ????? |???????????????????????????????????????????????????????????????? c.判断二维数组中(X,Y)的值是否为有雷值---不是--转到b ????? | ???? 是 ????? | d.雷数减一----------转到a 整个流程看懂了吧. 那么我们来实际分析呀,OD Time,从上面看我bp Rand然后进入步骤b,只要到了步骤c我们就能知道雷的内存区域了,是吧? 我们遍历区域就知道哪些格子是雷了塞. 下断点: 当断点断下来了后? 我们可以看到堆栈窗口: 选中第一个,然后回车.返回: view source print? 1 /$? FF15 B0110001 call??? dword ptr [msvcrt.rand]?????? ; [rand 2 |.? 99??????????? cdq 3 |.? F77C24 04???? idiv??? dword ptr [esp+4] 4 0100394B? |.? 8BC2????????? mov???? eax, edx 5 0100394D? \.? C2 0400?????? retn??? 4 有点儿基础的朋友可以看出来,这里是它写了一个函数,先Rand一个数,然后整除另一个数,返回取余的结果. 其中这2个数是什么,上面那图我们看见2个返回到,是吧?那么选中第二个回车呗. 下断,单步走:我们就会发现压入栈的是1E=29,那么应该是30个,我们看一下是行还是列. 也就是这个这个函数传入的参数是行列数,哈哈因为这个C++的,所以PUSH那一下就是在传参数.好的看具体参数: 现在可以看出来,rand函数的参数用的返回地址,$010036D2,而rand出来值再对行列数取余,也就是[esp+4]就是这个30,这样就保证,最后这个值肯定小于30咯. view source print? 01 010036C7? | /FF35push??? dword ptr [1005334]????????????? ;? 将列数压入栈,发现存列的内存地址了 02 010036CD? |. |E8 6E020000?? call?????????????????????????? ;? 返回X 03 010036D2? |. |FF35push??? dword ptr [1005338]????????????? ;? 将行压入栈,发现存行的内存地址 04 010036D8? |. |8BF0????????? mov???? esi, eax???????????????????????? ;? esi就是X 05 010036DA? |. |46??????????? inc???? esi????????????????????????????? ;? 因为rand是0~n-1,所以这里就要+1 06 010036DB? |. |E8? call?????????????????????????? ;? 返回Y 07 010036E0? |. |40??????????? inc???? eax 08 010036E1? |. |8BC8????????? mov???? ecx, eax???????????????????????? ;? ecx就是Y 09 010036E3? |. |C1E1 05?????? shl???? ecx, 5?????????????????????????? ;? 将Y*32,这样就转换

文档评论(0)

wyw118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档