首页
社区
课程
招聘
6
[旧帖] [原创]大牛的小bug,对某Windows x64 shellcode的一点改进 0.00雪花
发表于: 2012-4-23 20:40 3410

[旧帖] [原创]大牛的小bug,对某Windows x64 shellcode的一点改进 0.00雪花

2012-4-23 20:40
3410

本人新人,但是关注看雪前辈、大牛们的文章很久了,确实受益匪浅~最近一段时间对windows x64 shellcode比较感兴趣,发现看雪里有一些很好的文章,同时从互联网上看到几个页面,写了这方面,很好:1、

2、

,其中第二篇写得更棒,Bill McDermott写的,崇拜and敬仰~


    于是,拿他的代码去机器上调试,结果测出了一点问题,具体如下:


    他说,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
lea rdx, loadlib_func
lea rcx, kernel32_dll
call lookup_api         ;get address of LoadLibraryA
mov r15, rax            ;save for later use with forwarded exports
 
lea rcx, user32_dll
call rax                ;load user32.dll
 
lea rdx, msgbox_func
lea rcx, user32_dll
call lookup_api         ;get address of MessageBoxA
 
xor r9, r9              ;MB_OK
lea r8, title_str       ;caption
lea rdx, hello_str      ;Hello world
xor rcx, rcx            ;hWnd (NULL)
call rax                ;display message box
 
kernel32_dll    db  'KERNEL32.DLL', 0
loadlib_func    db  'LoadLibraryA', 0
user32_dll      db  'USER32.DLL', 0
msgbox_func     db  'MessageBoxA', 0
hello_str       db  'Hello world', 0
title_str       db  'Message', 0


通过以上代码就可以,跳出一个messagebox,没错确实可以的,但是我把代码做了下修改,出问题了(我的代码在goasm下编译,语法有相应修改)


1
2
3
4
5
6
7
8
9
10
11
12
    Lea rdx, str_loadlib_func
Lea rcx, str_kernel32_dll
Call lookup_api         ;get address of LoadLibraryA,rax=LoadLibraryA
Mov r15, rax
 
Lea rdx, str_create_thread
Lea rcx, str_kernel32_dll
Call lookup_api         ;get address of createthread to rax
 
    str_kernel32_dll: DB 'KERNEL32.DLL', 0H
    str_loadlib_func: DB 'LoadLibraryA', 0H
    str_create_thread: DB 'CreateThread', 0H


调用createthread  api函数时,程序出现异常,退出了~写程序调试一下看问题出在哪里:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Invoke LoadLibrary, Addr str_kernel32_dll
Invoke GetProcAddress, rax, Addr str_create_thread
Int 3
Lea rdx, str_loadlib_func
Lea rcx, str_kernel32_dll
Call lookup_api         ;get address of LoadLibraryA,rax=LoadLibraryA
Mov r15, rax
Int 3
 
Lea rdx, str_create_thread
Lea rcx, str_kernel32_dll
Call lookup_api         ;get address of createthread to rax
Int 3
 
Ret
 
str_kernel32_dll: DB 'KERNEL32.DLL', 0H
str_loadlib_func: DB 'LoadLibraryA', 0H
str_create_thread: DB 'CreateThread', 0H


用windbg断住每个int3,看正确的createthread地址 与我们获取的有什么不同。


这是第一个int 3现场


[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

上传的附件:
收藏
免费 6
支持
分享
赞赏记录
参与人
雪币
留言
时间
伟叔叔
为你点赞~
2024-5-31 04:34
心游尘世外
为你点赞~
2024-5-31 01:13
QinBeast
为你点赞~
2024-5-31 01:00
飘零丶
为你点赞~
2024-3-27 03:39
shinratensei
为你点赞~
2024-1-29 01:14
PLEBFE
为你点赞~
2023-3-7 00:44
最新回复 (6)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发~那个老外的文章确实很棒,不过内容很多啊,需要仔细研究~
貌似坛子里搞x64 shellcode的仁兄不多啊~新手区就更少了
2012-4-24 08:06
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
是啊~搞x64汇编的弟兄现在还不多,但是x64是趋势吧~
我后边贴出来的那个改进的lookup_api是可以直接用的,注意呦
2012-4-24 09:39
0
雪    币: 615
活跃值: (212)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
厉害啊,收藏了~~
2012-4-24 19:15
0
雪    币: 47
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
楼主精神可嘉,一起学习!
2012-4-24 19:24
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
崇拜楼主,准备花一个月时间消化,顶起。。。
2012-4-24 22:23
0
雪    币: 236
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不错,不错,分析挺细致,对要学习x64 shellcode的人能起到很大帮助
2012-4-25 19:53
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册