call 我想学用易语言写调用游戏远程call

call 我想学用易语言写调用游戏远程call,第1张

先学习汇编吧,王爽的教程不错

废话少说,开始解答

CALL是调用一个过程或地址

如果有参数call调用前要push参数

根据你提供的信息发现 ElementC0047B800 是stdcall格式

所以参数是倒序

因为DD[eax]=145

所以push eax = push 145

至于"ecx、ebx、edx、需不需也写进去" 我无法判断,因为你没给出"ElementC0047B800"的反汇编,你可以F7跟踪,看看有没有 *** 作那些寄存器

cmp-sub很多很多MOV EBP,ESP--------AND AH,CH

MOV EBX,DWORD PTR DS:[ESI]---------XOR EBX,DWORD PTR DS:[ESI]

sub ebp,7---------- add ebp,-7

add dword ptr ss:[ebp-130],edx -------- adc dword ptr ss:[ebp-130],edx

jnb short fsg2_00040015D-------------- ja short fsg2_00040015D

sub ebx,eax----------sbb esi,ecx

call 复件_(4)004CF607 ----------------- push 复件_(4)004CF607

SBB ECX,DWORD PTR DS:[ESI+2]----------ADC ECX,DWORD PTR DS:[ESI+2]

XOR [EAX],AL---------------MOV [EAX],AL

JMP NEAR [1071c]---------------------JMP NEAR [1071B]

JNS ---------------POP ECX

JNS -------------- jnc-jnb

JE--------------jnz

JE--------------JB

CMP DWORD PTR DS:[100170A4],0 -------------sub

MOV [EBP-18],ESP-------------------MOV [EBP-18],AH

JNB -----------------JGE

mov [ebp-256], eax -------------adc [ebp-226], eax PUSH EAX PUSH EBX

MOV EAX,[ESP+10] MOV EAX,[ESP+10]

MOV [ESP+10],EBP MOV [ESP+10],EBP

LEA EBP,[ESP+10] LEA EBP,[ESP+10]

SUB ESP,EAX SUB ESP,EAX

PUSH EBX PUSH EDI

PUSH ESI PUSH EAX

PUSH EDI PUSH ESI

MOV EDI,[EBP+10]-------------MOV EDI,[EBP+11]

TEST ESI,ESI-------------- AND ESI,ESI

XOR EAX,EAX------------OR EAX,EAX

--------------------------------------------------

修改jd该为JG还可以看下JB一般都是2个字节,2进制看下

ascll吗,基本上还可以修改大小的,还有的是看下跳转

jb-------------jg

-----------------------------------------------

CALL ---------看到了CALL跟随进去看NOP就可以把CALL的地址该成NOP

方法2--看下附近有没有MOV修该成NOP看下可以免杀不。可以的话该XOR

方法3--看附近jnz跳转该下跳转的地址/可免杀不/

JNZ 00874E85---PUSH DWORD PTR DS:[88F658]

PUSH下面MOV ECX,88C0AC就可以JNZ该到MOV连接

------------------------------------------------------------

jnz--je-jmp修改中要看下跳的地址是不是很重要说明[1]

JNZ 00874E85--MOV EAX,88B6D0 可以是该成JE

-----------------------------------------------------------

005E 01 ADD BYTE PTR DS:[ESI+1],BL 修改方法

006E 01 ADD BYTE PTR DS:[ESI+1],CH 这样的成功机会不大看运气

------------------------------------------------------------

修改这样的命令要看下 1071C的地址,有没有,可以修改的

本身怎个命令是不可以修改的

JMP DWORD PTR DS:[1071C]----DS:[1071b]

还可以看下上下有没有空的代码来换下位置

------------------------------------------------------------

看下面的命令 观察上下的指令来修改|

CALL EAX |CALL EBX

MOV DWORD PTR SS:[EBP-1C],EAX |MOV DWORD PTR SS:[EBP-1C],EBX

---------------------------------------------------------------

比效指令 CMP:看下是个比效指令 在看下JNZ条件转移指令

就是说CMP比效正确就跳那我们可以把CMP用NOP掉在把JNZ该成JMP

不进行CMP比效

CMP ESI,1

JNZ SHORT VVV1000D793

---------------------------------------------------------------

看下MOV数据传送指令 很明白就是将ESI给ESP+14

那看下JE跳下去的指令XOR AL,AL没有用可以NOP掉

MOV [ESP+14],ESI

JE 1000A74B 跳转去下个指令XOR AL,AL

修改成

MOV ESP,ESI

ADD ESP,14

----------------------------------------------------------------

LEA有效地址传送指令,遇到这样的指令不要该他可能会不能运行

LEA ECX,[ESP+10]

修改思路可以看下,上面的指令,如下

MOV EAX,DWORD PTR DS:[EBX]

CMP EAX,-1

JE 100017E9 到达的就是LEA ECX,[ESP+10]

上面可以看出是一系列的比对指令,最后LEA地址传

可以把MOV CMP JE 三个比对NOP掉在把LEA写到MOV CMP JE地址上,在用

JMP跳到下个指令运行

----------------------------------------------------------------

修改大小写在汇编里的变化

------------------------------------------------------------

INS BYTE PTR ES:[EDI],DX 小<l>------------------DEC ESP大<L>

PREFIX ADDRSIZE: 小<g> ----------------INC EDI 大<G> DAA 组合的十进制加法调整指令 --------DAS 减法的十进制调整 =================================================================

XCHG EAX,ESP -----------PUSHFD

数据交换指令 XCHG 标志传送指令 PUSHF

-----------------------------------------------------------------

ADD [EAX],CH---------------------ADD [EAX],DH

-----------------------------------------------------------------

ADD [EAX],BH 0038 ----------------ADD [EAX+40],AL 0040 40

----------------------------------------------------------------

ADD [EAX+EAX2+46],AL ----------------ADD [EAX+EAX2+46],CL

----------------------------------------------------------------

ADD [EAX+40],DL 0050 40 ------------------ 0058 40 ADD [EAX+40],DL

---------------------------------------------------------------------

ADD AH,CH 00EC -----------------00F4 ADD AH,DH

你要知道的是 call 只是将偏移地址压栈(而不是CS ,IP)

你的假如代码通透分析如下

pushad 8个基本寄存器压栈保存

mov eax,xxxx 想必你的意思是偏移地址传送给eax,但这样是有问题的

call eax 我们就 当这样是没问题,只是假设。。call调用前把下一行的

代码的偏移地址压栈(这样返回后就可以继续执行call的下一句

代码了)

popad 8个基本寄存器出栈

ret d出偏移地址(call后面一下代码的地址)

为什么其他栈 *** 作就不影响返回呢???

首先 pushad压栈8个32位基本寄存器,然后call压进自身下一行代码的偏移地址

然后 call返回的时候它调用的子例程里面也有个retd出call压进栈的偏移地址(估计你是不理解 这里)

你这段代码如果是子例程的,那后面可以加ret,如果是主程序代码段,那后面的ret

应该去掉

关键CALL和关键跳

方法一:

输入假码注册程序,记录下错误提示信息。

OD载入程序-->

右键-->查找-->所有参考文本字串-->(右键-->查找文本,注:不要区分大小写,选择整个范围)找到上面记录的错误提示文本

或:右键-->超级字符串参考-->查找ASCII码/UNICODE->(右键-->查找文本,注:不要区分大小写,选择整个范围)找到上面记录的错误提示文本

-->双击进去,关键CALL和关键跳就在其上面附近。一般在其上有提示注册成功的文本信息,在成功和失败提示文本的上面有一个比较,比较下面有一个跳转。在比较的上面的第一个CALL就是关键CALL了。

方法二:

OD载入程序-->F9运行程序-->输入假码注册程序,确认,d出错误提示框-->F12暂停程序运行--->ALT+K查看调用堆栈-->找到来自主程序的调用-->双击进去-->,关键CALL和关键跳就在其上面附近。一般在其上有提示注册成功的文本信息,在成功和失败提示文本的上面有一个比较,比较下面有一个跳转。在比较的上面的第一个CALL就是关键CALL了。

简单爆破方法:

方法一:修改关键CALL(通过修改寄存器的值达到控制关键跳实现与否)

找到关键CALL之后先在关键CALL上下个断点(其上附近亦可)-->重载程序-->F9运行程序-->输入假码,确认-->回到OD,则停留在我们上面下段的地方-->单步跟踪到关键CALL上F7步入-->在段首(跟进去所在的位置)写入mov eax,1(注:其中之所以要修改eax的值是由于影响关键跳的比较的寄存器为eax,通常都是eax。之所以修该为1,是为了转换关键跳的实现与否,如:默认eax为0,关键跳没实现,那么我没就把eax改为非零值即可),在下一行写retn X(X为该段尾返回的值,如果他没有返回我们也不返回任何值)-->保存修改-->OK

方法二:修改关键跳(直接不理会判断条件,强制改变其跳转状态)

该关键跳为相反状态(如:je-->jz, jnz-->jmp 等等)

用于学习交流,希望可以帮助到你。

以上就是关于call 我想学用易语言写调用游戏远程call全部的内容,包括:call 我想学用易语言写调用游戏远程call、汇编语言等价替换法、汇编的call与ret的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9465642.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存