[Question] Re: giúp mình tìm lỗi mấy chương trình C này với |
30/05/2009 15:48:58 (+0700) | #61 | 182344 |
StarGhost
Elite Member
|
0 |
|
|
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
|
|
@the_mistake: Mình không biết nhiều về lập trình, nhưng cũng xin trả lời qua vấn đề của bạn. Khi chương trình của bạn gặp lỗi tại runtime, thì bạn nên tiến hành debug code của mình, tức là nếu bạn viết bằng C thì debug trên C, viết bằng assembly thì debug trên assembly. Như vậy, nếu bạn viết trên C++ thì không nên debug sử dụng assembly, như thế sẽ vô cùng khó khăn do đó không phải là cái bạn viết ra.
Hầu hết các lỗi sai đều có thể được phát hiện bằng việc debug high-level code như C, C++, etc. Tất nhiên là có những lỗi hoặc program behaviours mà để hiểu được rõ ràng thì chỉ có cách debug assembly code, ví dụ như một số lỗi về buffer overflow chẳng hạn.
Trust that helps. |
|
Mind your thought. |
|
|
|
[Programming] giúp mình tìm lỗi mấy chương trình C này với |
13/06/2010 22:26:00 (+0700) | #62 | 213233 |
|
H3x4
Member
|
0 |
|
|
Joined: 02/04/2009 00:03:16
Messages: 242
Offline
|
|
Thấy chủ đề này hay mà bị chìm khá lâu, mình xin phép post source code của các level trong wargame utumno của đám intruded.net, các puzzle này mô tả được khá nhiều loại lỗi trong C program như tràn bộ đệm, tràn số interger, sử dụng signal không chính xác, tràn 4bytes và tràn heap, thêm 1 điểm nữa là môi trường attack của game utumno này là NX-Enable do đó các bạn không thể đơn giản là return vào shellcode dược( ở đây phải sử dụng giải pháp là ret2libc với địa chỉ libc không có ascii-armor và không có aslr). Các bạn có thể thử sức theo info bên dưới, và pass của level1 là utumno.
Đây là cấu hình của nó:
(~/Intruded/Utumno) dump3r $ ssh level1@utumno.intruded.net -p 10106
*************************************************
* Welcome to Intruded.net Wargame Server *
* *
* * You are playing "Utumno" *
* * Most levels can be found in /wargame *
* * Login: level1:utumno *
* * Support: irc.intruded.net #wargames *
* *
* *
* ! Server is restarted every 12 hours *
* ! Server is cleaned every reboot *
* ! /tmp direcotry is writable *
* *
* *
*************************************************
level1@utumno.intruded.net's password:
level1@utumno:~$ cd /wargame/
level1@utumno:/wargame$ ls -la
total 104
drwxr-xr-x 2 root root 4096 2008-04-18 10:04 .
drwxr-xr-x 22 root root 4096 2008-04-17 01:41 ..
-rwx--x--- 1 level2 level1 7018 2008-04-18 04:52 level1
-r-Sr-x--- 1 level3 level2 7437 2008-04-18 04:53 level2
-r-Sr-x--- 1 level4 level3 7220 2008-04-18 04:53 level3
-r--r----- 1 level4 level3 961 2008-04-18 10:04 level3.c
-r-Sr-x--- 1 level5 level4 7075 2008-04-18 04:53 level4
-r-Sr-x--- 1 level6 level5 7258 2008-04-18 04:54 level5
-r--r----- 1 level6 level5 1048 2008-04-18 10:04 level5.c
-r-Sr-x--- 1 level7 level6 7510 2008-04-18 04:55 level6
-r--r----- 1 level7 level6 1268 2008-04-18 10:04 level6.c
-r-Sr-x--- 1 level8 level7 7721 2008-04-18 04:55 level7
-r--r----- 1 level8 level7 1560 2008-04-18 10:04 level7.c
-r-Sr-x--- 1 level9 level8 7635 2008-04-18 04:56 level8
-r--r----- 1 level9 level8 1227 2008-04-18 10:04 level8.c
-rwsr-x--- 1 level10 level9 7550 2008-04-20 11:46 level9
-r--r----- 1 level10 level9 1082 2008-04-18 10:04 level9.c
level1@utumno:/wargame$
Level1: như các bạn thấy là 1 file chỉ có quyền thức thi.
level2 binary : http://www.mediafire.com/?xbnjmtdt2mn
level3.c:
Code:
#include <stdio.h>
int main(int argc, char *argv[])
{
char buffer[12];
if(argc)
{
printf("Aw..\n");
exit(1);
}
strcpy(buffer, argv[10]);
return 0;
}
level4 : http://www.mediafire.com/?gymkennq3yz
level5.c
Code:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char c[65212];
char b[64];
unsigned short j;
int i;
i = atoi(argv[1]);
j = i;
if(j >= 64)
{
exit(1);
}
memcpy(b, argv[2], i);
return 0;
}
level6.c
Code:
#include <stdio.h>
void hihi(char *p)
{
char buf[12];
if(strlen(p) >= 20) /* 16) */
{
strncpy(buf, p, 20); /* 16); */
}
else
{
strcpy(buf, p);
}
}
int main(int argc, char *argv[])
{
if(argc)
{
printf("Aw..\n");
exit(1);
}
printf("Here we go - %s\n", argv[10]);
hihi(argv[10]);
return 0;
}
level7.c
Code:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int table[10];
char *p;
int val, pos;
if(argc < 3)
{
printf("Missing args\n");
exit(1);
}
p = malloc(32);
if(!p)
{
printf("Sorry, ran out of memory :-(\n");
exit(1);
}
val = strtoul(argv[2], NULL, 16);
pos = strtoul(argv[1], NULL, 10);
if(pos > 10)
{
printf("Illegal position in table, quitting..\n");
exit(1);
}
else
{
table[pos] = val;
}
strcpy(p, argv[3]);
printf("Table position %d has value %d\nDescription: %s\n",
pos, table[pos], p);
return 0;
}
level8.c
Code:
#include <setjmp.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
void jmp(int i);
jmp_buf *jbp;
int main(int argc, char *argv[])
{
int i;
jmp_buf foo;
char buf[128];
if(argc < 2)
exit(1);
signal(SIGUSR1, jmp);
signal(SIGUSR2, jmp);
i = setjmp(foo);
jbp = &foo;
if(i)
strcpy(buf, argv[1]);
sleep(2);
exit(i);
}
void jmp(int i)
{
longjmp(*jbp, i);
}
level9.c:
Code:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *p, *p2;
p = malloc(512);
if(!p)
{
exit(1);
}
p2 = malloc(4);
if(!p2)
{
exit(1);
}
strcpy(p, argv[1]);
free(p);
free(p2);
return 0;
}
|
|
|
|
|
[Programming] giúp mình tìm lỗi mấy chương trình C này với |
04/08/2010 18:06:22 (+0700) | #63 | 217632 |
|
H3x4
Member
|
0 |
|
|
Joined: 02/04/2009 00:03:16
Messages: 242
Offline
|
|
Có ai chơi trò này ko ta , bên mình một số bạn đang đua nhau http://blackbox.smashthestack.org:85/
ai có hứng thú thì join irc chơi chung |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|