吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2448|回复: 10
收起左侧

[求助] 求教CIP是什么东西? 有三句代码打死也看不懂,球高手解答!

[复制链接]
冥界3大法王 发表于 2020-7-27 09:42
本帖最后由 冥界3大法王 于 2020-7-27 09:51 编辑

https://www.lanzoux.com/iqYXOf0uu5a这个为测试程序
[Asm] 纯文本查看 复制代码
[/size]
[size=14px]
使用到的脚本 [/size][size=14px]
//start
msg "upx (3.91) unpacker" 这明白弹框信息 
msg "make sure you're at the entry point of the program before you continue"这明白弹框信息 
pause

//clear breakpoints 
bc           //清全部cc断点
bphwc    //清全部硬件断点

//script start
step      //单步
bphws csp,r  //为csp设一个硬件访问断点,但csp? 有这个寄存器吗 ? 
erun      无视异常运行
bphwc  清全部硬件断点

//find oep jump       查找oep
find cip,"80E9"     // 在内存页中 找代码码,cip又迷糊了,有这个寄存器???
cmp $result,0       //不太理解,看了帮助,也就知道 无非比较 两变量,细节糊涂。
je error

//go to OEP
bp $result+1     
erun
bc
sti

//finish script
ret

error:
msg "didn't find oep jump"
ret

image.png

光标执行到 00409D56 | 8D4424 80                      | lea eax,dword ptr ss:[esp-80]           
也就是脚本 bp $result+1 说什么执行脚本出错


// Author: Thomas Thelen
// Contact: https://github.com/ThomasThelen
// Comment: Takes you to the OEP of files packed with UPX from versions 2.02 to 2.03
// Date: 8/12/2015
// Instructions: Open the file in x64dbg and run the script.


//Begin Script
run
bc
bphwc


//Find the OEP
find CIP, E91B33FFFF// Signature of OEP jump  我不明白CIP是啥?无论是32位的调试器还是64位的了,哪有去?
我也试过 findallmem esp,"E9 98 72 FF FF"这样搜索一页变多页就只有一个结果了。但是问题来,如何把这个的结果传给$result ?
网上x32dbg中仅有那么几个少的可怜的破脚本,还没有一个入门的详解。
RAX : 00007FF793770100     
RBX : 0000000000000000
RCX : 0000007E186C7000
RDX : 00007FF793770100   
RBP : 0000000000000000
RSP : 0000007E1887F758
RSI : 0000000000000000
RDI : 0000000000000000
R8  : 0000007E186C7000
R9  : 00007FF793770100  
R10 : 00000FFEF26EE020
R11 : 0000000100400000
R12 : 0000000000000000
R13 : 0000000000000000
R14 : 0000000000000000
R15 : 0000000000000000
RIP : 00007FF793770100     



cmp $result, 0        // Check for success   帮助中所说比较两个数的结果
此命令比较两个表达式。请注意,当您要检查值是否更大或更小时,将进行arg1>arg2的比较。
如果此值的计算结果为true,则$_BS_FLAG将设置为1,表示该值更大。所以测试arg1是否大于/小于arg2。
arg1第一个要比较的表达式。
arg2要比较的第二个表达式。

je error        // Error otherwise
bp $result        // Set a breakpoint on the jump   这个是设一个断点  (加上那个结果的变量) 怎么加,不明白。 我找了个upx3.95的做试验,卡住了。
run        
st        
sti        // Take jump to OEP
bc        // Clear Breakpoints
ret


error:
msg "Could not find the OEP."
ret




// Author: Thomas Thelen
// Contact: https://github.com/ThomasThelen
// Comment: Takes you to the OEP of files packed with UPX from versions 3.06 to 3.09
// Date: 8/12/2015
// Instructions: Open the file in x64dbg and run the script.


//Begin Script
run
bc
bphwc


//Find the OEP
find CIP, E9BA31FFFF// Signature of OEP jump====》还是上面的那些问题。
cmp $result, 0        // Check for success
je error        // Error otherwise
bp $result        // Set a breakpoint on the jump
run        
st
sti        // Take jump to OEP
bc        // Clear Breakpoints
ret


error:
msg "Could not find the OEP."
ret

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 冥界3大法王 发表于 2020-7-27 10:01
本帖最后由 冥界3大法王 于 2020-7-27 10:07 编辑

看了下帮助,说有cip
所有的寄存器(所有大小)可以用来作为变量。
大多数寄存器的变量名称与它们的名称相同,但以下寄存器例外:
x87 控制字标志:该寄存器的标志被这样命名:_x87CW_UM
除了在架构中的寄存器外,x64dbg 还提供下列寄存器:CAX、CBX、CCX、CDX、CSP、CBP、CSI、CDI、CIP。这些寄存器在 32-位平台上被映射到 32-位寄存器,而在 64-位平台上被映射到 64-位寄存器。例如,CIP 在 32-位平台是 EIP,而在 64-位平台是 RIP。该功能为了能支持独立于体系结构的代码。
但cip指的是哪里呢?
image.png
当行脚本执行到红箭头行!
msg {cip}  ,结果是00409D56
msg {$result} 的 执行结果为1
怎么才能让bp  结果+变量得到bp  00409D63 给这行下断点呢?
oudaidai 发表于 2020-7-27 10:20
本帖最后由 oudaidai 于 2020-7-27 10:26 编辑

学习学习,下次不敢了
 楼主| 冥界3大法王 发表于 2020-7-27 10:23

@oudaidai
感谢个屁,我很多求助未解决还成了收藏
楼主是糊涂蛋,楼下是超级糊涂蛋, 错了还害死一窝。
不忘初心哟 发表于 2020-7-27 10:24

人家求助都没有找到回答 你感谢个毛啊 怕是灌水灌上瘾了
oudaidai 发表于 2020-7-27 10:25
不忘初心哟 发表于 2020-7-27 10:24
人家求助都没有找到回答 你感谢个毛啊 怕是灌水灌上瘾了

sorry,我自己在学习selenium,试一下这种回帖方式
oudaidai 发表于 2020-7-27 10:27
冥界3大法王 发表于 2020-7-27 10:23
@oudaidai
感谢个屁,我很多求助未解决还成了收藏
楼主是糊涂蛋,楼下是超级糊涂蛋, 错了 ...

sorry,我自己在学习selenium,试一下这种回帖方式,对不起
chasels 发表于 2020-7-27 10:43
冥界3大法王 发表于 2020-7-27 10:23
@oudaidai
感谢个屁,我很多求助未解决还成了收藏
楼主是糊涂蛋,楼下是超级糊涂蛋, 错了 ...

笑死,本来想看看大神的解答呢
pack39 发表于 2020-7-29 16:37
在PEDIY我也回了你,这里再回你一次。
我不知道你在纠接什么,这个CIP,在32位里面就是指的EIP,如果在64位上就是RIP,EIP里保存了CPU即将执行的指令的地址,重点,是指令的地址,它会不断增加的。你也看得到现在的地址是00409D56,因为脚本停在这里,这个地址里目前保存的数据是8D442480(在计算机里指令和数据是分不开的),4个字节,所以它的下一个地址就是00409D5A -4 =00409D56,脚本的意思,从这个地址开始查找这些指令,比对,如果找到了80E9,E9就是JMP指令的哈,就把保存有80E9指令的地址返回给result,很显然,这个地址是指向80,而不是E9,而我们需要在E9上下断,所以会有result+1的做法。其实这个脚本也可以改成这样:find cip,"E9"  然后  bp $result     //下断在E9上,E9就是JMP啦,脚本作者可能是为了稳健才写成查找80E9的。你甚至可以改成:find cip,"E99872ffff"   ,这样result应该会是地址409D63, 然后精确的在E9上下断,bp $result ,再乱搞一下,你甚至可以find cip,"75FA",然后bp $result+5
pack39 发表于 2020-7-29 16:41
仔细看你贴子,难怪你得不到正确的result值,我晕,你自己看看,这条命令:      find CIP, E9BA31FFFF// Signature of OEP jump====》还是上面的那些问题。
Result返回的是地址,绝对不会是1,要么是0,谁会给它1呢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 23:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表