Home
Calendar
Certifications
Columns
Features
Forum
Resources
Vitals
Latest Additions
April 2013 Free Giveaway Sponsor - eLearnSecurity
Human Intelligence to Navigate the Security Data Deluge
February 2013 Free Giveaway Winner of SANS CyberCon Training
Interview: Bugcrowd Founders on Herding Ninjas for Crowdsourced Bug Bounties
Network Forensics: The Tree in the Forest
March 2013 Free Giveaway Sponsor - Mile2
Book Review: Violent Python
February 2013 Free Giveaway Sponsor - SANS
Holiday 2012 Free Giveaway Winner of Metasploit Pro by Rapid7
Course Review: SANS FOR408 Computer Forensic Investigations – Windows In-Depth
The Security Consulting Sugar High
Tutorial: Fun with SMB on the Command Line
Interview: Ilia Kolochenko, CEO of High-Tech Bridge
October 2012 Free Giveaway Winner of LearningGate Training
The Broken: Assessing Corporate Security in 2012 to Make a Better 2013
EH-Net Login
Welcome Guest.
Username:
Password:
Remember me
Lost Password?
No account yet?
Register
Who's Online
We have 64 guests and 2 members online
You are here:
Home
Ethical Hacking Discussions and Related Certifications
Programming
Debugging simple assembly language/shellcode
EH-Net
May 18, 2013, 10:40:01 AM
Welcome,
Guest
. Please
login
or
register
.
Did you miss your
activation email?
1 Hour
1 Day
1 Week
1 Month
Forever
Login with username, password and session length
News
: Go back to The Ethical Hacker Network Online Magazine
Home Page
Home
Help
Calendar
Login
Register
EH-Net
>
Ethical Hacking Discussions and Related Certifications
>
Programming
(Moderator:
don
) >
Debugging simple assembly language/shellcode
Pages: [
1
]
Go Down
« previous
next »
Print
Author
Topic: Debugging simple assembly language/shellcode (Read 10158 times)
0 Members and 1 Guest are viewing this topic.
Ignatius
Jr. Member
Offline
Posts: 91
Debugging simple assembly language/shellcode
«
on:
August 11, 2011, 04:36:32 AM »
I've resumed working with assembly language, having "played" around with it many years ago. I've generated shellcode that I've put into a C Code frame and then compiled using gcc in mingw. I loaded the executable into OllyDbg and, as expected, it starts at the entry point which is nowhere near the code that I wrote. I need to be able to find that code so I can step through it.
I've tried setting a register to a specific value (maybe 1357ABCD) at the beginning of my code and then set that as a condition via Ctrl-T (Condition to pause run trace), but it doesn't stop at my code. I've also tried inserting a few Int 3 instructions at the beginning of my code (or \xcc\xcc\xcc at the beginning of the shellcode). When I load the executable in OllyDbg and run it, it stops at the Int 3 but, when I step through the code past the Int 3, using F7 or F8, I frequently get an Access Violation which I never saw without the Int 3 instructions. The code stops dead and I can't go any further.
I've also tried using Immunity Debugger but it does exactly the same. If I can't find a way of seeing my code in a debugger and stepping through it to make sure it's doing what it's supposed to, I might just as well give up. I'm so frustrated!
Does anyone have any suggestions?
Logged
H1t M0nk3y
Hero Member
Offline
Posts: 864
Re: Debugging simple assembly language/shellcode
«
Reply #1 on:
August 11, 2011, 08:48:32 AM »
Hey Ignatus,
Don't give up! I suggest you go through these free and excellent video tutorials from vivek:
http://www.ethicalhacker.net/component/option,com_smf/Itemid,54/topic,6450.msg34580/#msg34580
I went through all assembly tutorials (both Linux and Windows) and I learned quite a lot.
Good luck and let me know if it helped!
Logged
OSCP, GPEN, GWAPT, GSEC, CEH, CISSP
Ignatius
Jr. Member
Offline
Posts: 91
Re: Debugging simple assembly language/shellcode
«
Reply #2 on:
August 11, 2011, 12:49:44 PM »
Thank you.
I've seen Vivek's videos and my problem isn't so much writing the code. I'm far from an expert and have accessed several sites for code examples. The problem that I have is being able to load it into OllyDbg (or Immunity) and step through the code, watching what happens in the registers, memory etc. to make sure it does what I want.
I've also seen MaXe's excellent paper which deals with writing shellcode by hand and have worked my way through much of it ... but I still don't know how to stop reliably at
MY
shellcode within the compiled C Code, which is preceded by a whole load of code inserted by my compiler.
The tricks that I've tried result in an Access Violation when I have been successful in finding the start of my code and have stepped through it.
Logged
H1t M0nk3y
Hero Member
Offline
Posts: 864
Re: Debugging simple assembly language/shellcode
«
Reply #3 on:
August 11, 2011, 02:22:47 PM »
Are you using a 32 or 64 bit OS?
Also, I have an hard time understading what you are doing.
Quote
I've generated shellcode that I've put into a C Code frame
So you want to launch your exploit using an existing C program, isnt? But against which target? You're using OllyDbg on the target application or on the exploit C code?
May I ask you to explain step by step what you have done?
Logged
OSCP, GPEN, GWAPT, GSEC, CEH, CISSP
mambru
Jr. Member
Offline
Posts: 98
Re: Debugging simple assembly language/shellcode
«
Reply #4 on:
August 11, 2011, 05:27:25 PM »
Maybe if you share the source code and the exe we could help you to match the assembly code to the C code, or at least try to spot where the problem is.
Logged
mesho
Newbie
Offline
Posts: 24
Re: Debugging simple assembly language/shellcode
«
Reply #5 on:
August 11, 2011, 07:00:06 PM »
write what you did, hope we can help?!
Logged
Ignatius
Jr. Member
Offline
Posts: 91
Re: Debugging simple assembly language/shellcode
«
Reply #6 on:
August 12, 2011, 04:28:13 AM »
Thank you for the comments. Here's a detailed step-through, along with the code that I used. It's not an exploit, but simply a message box.
I have a laptop with 32-bit XP Pro SP3 (not a VM). The software is OllyDbg v2.00.01, nasm and mingw.
1) Put the following code through nasm with <nasm msgbox.asm -o msgbox.bin>.
Code:
;msgbox.asm
;The addresses are for XP SP3
[SECTION .text]
BITS 32
global _start
_start:
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
jmp short GetLibrary
GetLibraryReturn:
pop ecx
mov [ecx + 10], dl
;insert the NULL
mov ebx, 0x7c801d7b
;LoadLibraryA address in kernel32.dll
push ecx
call ebx
jmp short FunctionName
FunctionReturn:
pop ecx
xor edx, edx
mov [ecx + 11],dl
;insert the NULL
push ecx
push eax
mov ebx, 0x7c80ae40
;GetProcAddress address in kernel32.dll
call ebx
jmp short Message
MessageReturn:
pop ecx
xor edx, edx
mov [ecx+3],dl
;insert the NULL
push edx
push ecx
push ecx
push edx
call eax
ender:
xor edx, edx
push eax
mov eax, 0x7c81cb12
;ExitProcess address in kernel32.dll
call eax
GetLibrary:
call GetLibraryReturn
db 'user32.dllN'
FunctionName:
call FunctionReturn
db 'MessageBoxAN'
Message:
call MessageReturn
db 'HeyN'
2) Extract the 105 bytes of NULL-free shellcode from msgbox.bin and put it into a C frame:
Code:
//msgbox.c
char code[]=
"\x31\xc0\x31\xdb\x31\xc9\x31\xd2"
"\xeb\x35\x59\x88\x51\x0a\xbb\x7b"
"\x1d\x80\x7c\x51\xff\xd3\xeb\x37"
"\x59\x31\xd2\x88\x51\x0b\x51\x50"
"\xbb\x40\xae\x80\x7c\xff\xd3\xeb"
"\x37\x59\x31\xd2\x88\x51\x03\x52"
"\x51\x51\x52\xff\xd0\x31\xd2\x50"
"\xb8\x12\xcb\x81\x7c\xff\xd0\xe8"
"\xc6\xff\xff\xff\x75\x73\x65\x72"
"\x33\x32\x2e\x64\x6c\x6c\x4e\xe8"
"\xc4\xff\xff\xff\x4d\x65\x73\x73"
"\x61\x67\x65\x42\x6f\x78\x41\x4e"
"\xe8\xc4\xff\xff\xff\x48\x65\x79"
"\x4e";
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
3) Compile the C code with <gcc msgbox.c -o msgbox.exe>.
4) Run msgbox.exe from the command line and it pops up the message box, so everything's working as it should.
5) Open OllyDbg and load msgbox.exe. It show the Entry Point of the executable (PUSH EBP; MOV EBP, ESP; SUB ESP, 18 etc.).
AIM
Find my code in OllyDbg (XOR EAX, EAX; XOR EBX, EBX; XOR ECX, ECX; XOR EDX, EDX etc.) then step through it whilst watching the registers, stack and memory.
I've tried some ideas:
a) put several int 3 immediately before the initial XOR EAX, EAX instruction
b) put "\xcc\xcc\xcc\xcc" at the top of my shellcode before compiling
c) put an instruction such as MOV EAX, 0ABAABA0 before the initial XOR EAX, EAX in the hope that I could search for that particular command (via ctrl-T in OllyDbg)
unfortunately, none of these has allowed me to find my code in OllyDbg. I'm starting to think that it's not possible so, if it's not, how do I access code that I want to debug? If it's very complicated, I'll NEED to be able to see exactly what's happening to the registers, stack and memory so I can correct any errors.
I hope that I've provided sufficient information and I apologise for such a lengthy post!
«
Last Edit: August 12, 2011, 09:39:38 AM by Ignatius
»
Logged
H1t M0nk3y
Hero Member
Offline
Posts: 864
Re: Debugging simple assembly language/shellcode
«
Reply #7 on:
August 12, 2011, 10:29:53 AM »
Ignatius,
I have compiled your c code, ran it on WinXp SP3 and the executable works.
Then I opened OllyDbg and from the File | Open menu, I have attached msgbox.exe. I was able to see your assembly code easily. Here is what I did:
1) At the very begining of the program execution, when OllyDbg paused the execution, I put a break point (F2) on the following line:
Code:
00401173 . E8 A8FEFFFF CALL msgbox.00401020
2) I pressed F9 and the execution stopped at the breakpoint.
3) Now you won't see your assembly code the main window. You have to look at the bottom of your screen. Make sure you look at Hex/ASCII (see attachment).
Do you see your code? (31 C0 31 DB etc)
Logged
OSCP, GPEN, GWAPT, GSEC, CEH, CISSP
Ignatius
Jr. Member
Offline
Posts: 91
Re: Debugging simple assembly language/shellcode
«
Reply #8 on:
August 12, 2011, 12:59:54 PM »
Quote from: H1t M0nk3y on August 12, 2011, 10:29:53 AM
Do you see your code? (31 C0 31 DB etc)
Thank you for your assistance. I can see what you mean, but how do I get OllyDbg to step through my code in the CPU (top left) window? I see that the memory locations in that window are 00401000 to 00401FFF but my code starts at 00402000.
I stepped into (F7) CALL msgbox.00401020 and continued F7 repeatedly but nothing showed my code in the CPU window and I got bored pressing F7 repeatedly! Eventually, I pressed F9 and, sure enough, the execution worked perfectly.
Surely there's way of stepping through my code in OllyDbg? The msgbox code is simple enough but, if it was very complicated and didn't work as planned, I wouldn't be able to just "eyeball" it and see exactly why and where it was failing.
EDIT:
I just set a memory breakpoint at 00402000 by hilighting the first of my instructions in the Memory window then right click -> Breakpoint -> Memory and ran it via F9. It stopped at my code and displayed it in the CPU window so I thought that I'd cracked it. However, I pressed F8 repeatedly and, after 4 or 5 (memory location 0040203F - CALL 0040200A), I got an Access Violation.
Can you try it on your system and see if you get the same error? Do you (or anyone else) have any suggestions?
«
Last Edit: August 12, 2011, 01:18:20 PM by Ignatius
»
Logged
H1t M0nk3y
Hero Member
Offline
Posts: 864
Re: Debugging simple assembly language/shellcode
«
Reply #9 on:
August 12, 2011, 01:47:47 PM »
Quote
I see that the memory locations in that window are 00401000 to 00401FFF but my code starts at 00402000.
That's ASLR (Address space layout randomization). Basically, Windows makes it harder (but not impossible!!) to develop exploits by constantly changing the "starting address" of an application. So everytime you reboot, you will see your program using a different address. You will also notice that not all the address change, only half of it. There lies the trick of bypassing ASLR while writing exploits. But that's a more advance topic...
You can set breakpoints by selecting a line an hitting F2 or like you did, through the menu.
F8 resumes execution until the next breakpoint or the end of the program, so I am not sure about the access violation...
In the image I posted, you see where I placed my break point (in red). So when I launch the program (F9), Ollydbg stopped at this line. You don't need to press F7 or F8 at this point to see your code, it's in the lower pane.
One last thing I forgot to mention, make sure your see the column name "Hex dump" at the bottom. I think Ollydbg comes with Ascii or something like that display by default. You have to right-click in the lower pane and select "Hex | Hex/ASCII (16 bytes) " to see your asm code.
I may not be able to post again this weekend (no access to Win XP at home...), but I will try to continue help you Monday, if you haven't figured it out by then.
Don't give up!
Logged
OSCP, GPEN, GWAPT, GSEC, CEH, CISSP
Ignatius
Jr. Member
Offline
Posts: 91
Re: Debugging simple assembly language/shellcode
«
Reply #10 on:
August 13, 2011, 04:45:32 PM »
I'm starting to think that there's a bug in OllyDbg. If I put a breakpoint (F2) on 0040200B, 0040210B and 0040202C and run it to the first breakpoint (F9), it runs without any Access Violation and I can step through/over (F7/F8) as I want. If I remove the breakpoints and step through/over, the Access Violation recurs.
I'd be grateful if you (or someone else) can try it to see if the behaviour is specific to my system.
If it is a bug, its disappointing because if I had seen the Access Violation, I would have assumed that my code was at fault so would have been chasing my tail to correct it!
Logged
H1t M0nk3y
Hero Member
Offline
Posts: 864
Re: Debugging simple assembly language/shellcode
«
Reply #11 on:
August 13, 2011, 11:03:06 PM »
Hi Ignatius,
At this point, I think you have everything you need to achieve your goal. I proved to you it works and I tried the best I could to guide you on reproducing it.
I have been a developer for 11 years now and one thing I learn is that every time I think the tool is bad and I can't prove why it's bad, I have always been wrong.
Reboot, reinstall Ollydbg, do what ever you need to do, but it can be done and you are close to doing it.
Banging your head is not always a bad thing. But in order to view your code, I doubt the Access Violation is important.
Good luck and post your results!!
Logged
OSCP, GPEN, GWAPT, GSEC, CEH, CISSP
matugm
Newbie
Offline
Posts: 4
Re: Debugging simple assembly language/shellcode
«
Reply #12 on:
August 14, 2011, 05:13:41 AM »
Hey,
there is a few things you can do, for example use the "search for sequence of commands" feature of olly and look for the first 3 instructions of ur shellcode, also look here
http://www.ethicalhacker.net/content/view/165/2/
and read this part "Finding Main() - Compiler Code vs Developer Code", hope that helps
Logged
Ignatius
Jr. Member
Offline
Posts: 91
Re: Debugging simple assembly language/shellcode
«
Reply #13 on:
August 14, 2011, 01:38:44 PM »
@H1t M0nk3y: It's gratifying to have guidance from someone who has such a lot of experience under their belt. We've both shown that the executable works as planned, both within and outside OllyDbg. I didn't know if the Access Violation when stepping though/over was due to something that I was doing wrong or if it was, indeed, a bug within OllyDbg. I turn my computer off each night and the executable is standalone, rather than an installation. I've tried both v1.10 and v2.00.01 with identical results. I've also tried Immunity Debugger with the same result. I think I'll hilight this problem to the OllyDbg developer but I didn't want to make a fool of myself in case the behaviour was due to something that I was. or wasn't, doing!
@matugm: Thank you for the link. I tried searching for the initial four xor commands but they didn't show up in the main (CPU) window until I hit the memory breakpoint that I mentioned in an ealier post in this thread.
Logged
Pages: [
1
]
Go Up
Print
« previous
next »
Jump to:
Please select a destination:
-----------------------------
EH-Net
-----------------------------
=> Calendar Of Events
===> ChicagoCon 2007
===> ChicagoCon 2008s
===> ChicagoCon 2008f
===> ChicagoCon 2009s
=> Ethical Hacktivism
=> News Items and General Discussion About EH-Net
===> Greetings
=> Special Events
-----------------------------
Ethical Hacking Discussions and Related Certifications
-----------------------------
=> General Certification
===> Networking
===> OS
===> Security
=> Compliance, Regulations & Standards
=> Control Systems
=> Cyber Warfare
=> Forensics
===> CCE / MCCE - (Master) Certified Computer Examiner
===> CHFI - Computer Hacking Forensic Investigator
===> EnCE - EnCase® Certified Examiner
===> GCFA - GIAC Certified Forensics Analyst
=> Hardware
=> Incident Response
===> CSIH - Computer Security Incident Handler
===> GCIH - GIAC Certified Incident Handler
=> Malware
===> Advisories
=> Mobile
=> Network Pen Testing
===> CEH - Certified Ethical Hacker
===> CPTC - Certified Penetration Testing Consultant
===> CPTE - Certified Penetration Testing Engineer
===> CSTA - Certified Security Testing Associate
===> eCPPT - eLearnSecurity Certified Professional Penetration Tester
===> ECSA - EC-Council Certified Security Analyst
===> GPEN - GIAC Certified Penetration Tester
===> OSCP - Offensive Security Certified Professional
=> Physical Security
=> Programming
=> Social Engineering
=> Web Applications
=> Wireless
===> CWNP Certs
===> GAWN - GIAC Assessing Wireless Networks
===> OSWP - Offensive Security Wireless Professional
=> Other
-----------------------------
Columns
-----------------------------
=> Editor-In-Chief
=> Andress
=> Gates
=> Haddix
=> Hadnagy
=> Heffner
=> Hoffman
=> Linn
=> RichM
=> Murray
=> J. Peltier
=> Weidman
=> Wilson
-----------------------------
Features
-----------------------------
=> /root
=> Book Reviews
=> Opinions
=> Skillz
===> Examples
===> May 06 - Star Hacks, Episode V: The Empire Hacks Back
===> July 06 - Hack Bill!
===> Sept 06 - Netcat in the Hat
===> Nov 06 - Hitch-Hackers Guide to the Galaxy
===> Dec 06 - A Christmas (Hacking) Story
===> Feb 07 - Charlottes Web Site
===> April 07 - Microsoft Office Space
===> June 07 - Serenity Hack
===> Oct 07 - Worst. Ethical. Hacker. Challenge. Ever.
===> Dec 07 - Frosty the Snow Crash
===> March 2008 - It Happened One Friday
===> Oct 2008 - Scooby Doo and the Crypto Caper
===> Dec 08 - Santa Claus Is Hacking to Town
===> Feb 2009 - Brady Bunch Boondoggle
===> July 2009 - Prison Break
===> October 2009 - SSHliders
===> December 2009 - Miracle on Thirty-Hack Street
===> December 2010 - The Nightmare Before Charlie Browns Christmas
-----------------------------
Resources
-----------------------------
=> Career Central
===> Looking For Work
===> Looking To Hire
=> Links to cool sites.
=> Mass Media
=> News from the Outside World
=> Tools
=> Tutorials
===> Tutorial Requests
Loading...
Exclusive Deal
SANSFIRE 2013
June 15 - 22
5% Off
w/ Code
:
EHN_5
SANS Deals 4 EH-Netters
5% OFF
Any
SANS Course
in Any Format!
Coupon Code:
EHN_5
Including
SANS Rocky Mountain 2013
&
SANS Boston 2013
Polls
Compared to this year, 2013 will be:
Great!
Better.
About the same.
Little worse.
FUBAR!
Recent Forum Topics
General Certification
: CPT Practical Submission
(0) by
z28power4u
OSCP - Offensive Security Certified Professional
: Class Scheduled 6/8 - Linux n00b
(5) by
MrTuxracer
Career Central
: Starter cert?
(0) by
Alert
Ethical Hacktivism
: lulzsec in it for the money
(7) by
Georgydfea
News Items and General Discussion About EH-Net
: [Article]-Holiday 2012 Free Giveaway Sponsor - Rapid7
(20) by
Georgydfea
News Items and General Discussion About EH-Net
: Наконец то ра
(4) by
Georgydfea
Web Applications
: Nessus and Nikto
(4) by
Seen
Tutorials
: Need guidance
(7) by
impelse
Malware
: EICAR?
(2) by
SephStorm
Network Pen Testing
: Cracking salted MD5 hash
(4) by
n37sh@rk
CEH - Certified Ethical Hacker
: Passed my C|EH
(3) by
n37sh@rk
Mass Media
: EC-council hacked, irony at his best?
(0) by
j0rDy
Web Applications
: SQL Injection into an INSERT statement.
(6) by
eyenit0
Network Pen Testing
: Solution for sipXtapi INVITE Message CSeq Field Header Remote Overflow
(1) by
m0wgli
Web Applications
: dns
(2) by
H1t M0nk3y
Other
: BSides Boston
(0) by
3xban
Career Central
: InfoSec in Central, FL
(2) by
tturner
Web Applications
: Web vulnerability scanner
(4) by
H1t M0nk3y
EH-Net News Feeds
Latest Additions
Privacy Notice
for TDCC & All Properties
Free Business and Tech Magazines and eBooks
© 2013 The Ethical Hacker Network
Joomla!
is Free Software released under the GNU/GPL License.