У меня есть этот небольшой код C:Нужна помощь в определении кода сборки
#include<stdio.h>
#include<stdlib.h>
int main(int argc , char *argv[])
{
char buff[64];
if(argc<2)
{
printf("No args passed\n");
return(1);
}
strcpy(buff,argv[1]);
return(0);
}
Я открыл его в Immunity Debugger, сейчас я не могу понять, где находится Главный начиная с. Я узнал AT & T язык ассемблера синтаксиса в прошлом году, но это совершенно другое. Я также вставляю код иммунитета. Существует много кода, который использовался перед загрузкой кода C и после его завершения, поэтому я не вставляю этот код из-за ограничения пространства (только часть кода, которую, как я предполагаю, могла начаться до Main &, содержит код сборки после кода C.) Plz помочь мне идентификации кода
0040128A 90 NOP
0040128B 90 NOP
0040128C 90 NOP
0040128D 90 NOP
0040128E 90 NOP
0040128F 90 NOP
00401290 /$ 55 PUSH EBP ;SAVING EBP
00401291 |. 89E5 MOV EBP,ESP ;STORING STACK IN EBP
00401293 |. 83EC 78 SUB ESP,78 ;CREATING SOME SPACE
00401296 |. 83E4 F0 AND ESP,FFFFFFF0
00401299 |. B8 00000000 MOV EAX,0 ;
0040129E |. 83C0 0F ADD EAX,0F ;
004012A1 |. 83C0 0F ADD EAX,0F ;;;WHAT IS THE REASON FOR ALL THESE??
004012A4 |. C1E8 04 SHR EAX,4 ;
004012A7 |. C1E0 04 SHL EAX,4 ;
004012AA |. 8945 A4 MOV DWORD PTR SS:[EBP-5C],EAX ; WHAT ARE THESE MEANT FOR ?
004012AD |. 8B45 A4 MOV EAX,DWORD PTR SS:[EBP-5C] ;/
004012B0 |. E8 8B040000 CALL buff.00401740 ; WHAT ARE 2 CALLS DOING ?
004012B5 |. E8 26010000 CALL buff.004013E0 ;/
004012BA |. 837D 08 01 CMP DWORD PTR SS:[EBP+8],1 ;COMPARE ARGC WITH 1(WHY NOT 2)
004012BE |. 7F 15 JG SHORT buff.004012D5 ;JUMP IF GREATER
004012C0 |. C70424 0030400>MOV DWORD PTR SS:[ESP],buff.00403000 ; PRINT ERROR
004012C7 |. E8 74050000 CALL <JMP.&msvcrt.printf> ;/
004012CC |. C745 B4 010000>MOV DWORD PTR SS:[EBP-4C],1
004012D3 |. EB 1E JMP SHORT buff.004012F3
004012D5 |> 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C] ; |
004012D8 |. 83C0 04 ADD EAX,4 ; |
004012DB |. 8B00 MOV EAX,DWORD PTR DS:[EAX] ; |
004012DD |. 894424 04 MOV DWORD PTR SS:[ESP+4],EAX ; |
004012E1 |. 8D45 B8 LEA EAX,DWORD PTR SS:[EBP-48] ; |
004012E4 |. 890424 MOV DWORD PTR SS:[ESP],EAX ; |
004012E7 |. E8 44050000 CALL <JMP.&msvcrt.strcpy> ; \strcpy
004012EC |. C745 B4 000000>MOV DWORD PTR SS:[EBP-4C],0
004012F3 |> 8B45 B4 MOV EAX,DWORD PTR SS:[EBP-4C]
004012F6 |. C9 LEAVE
004012F7 \. C3 RETN
004012F8 90 NOP
004012F9 90 NOP
004012FA 90 NOP
004012FB 90 NOP
004012FC 90 NOP
004012FD 90 NOP
004012FE 90 NOP
004012FF 90 NOP
00401300 /$ 55 PUSH EBP
00401301 |. B9 F0304000 MOV ECX,buff.004030F0
00401306 |. 89E5 MOV EBP,ESP
00401308 |. EB 14 JMP SHORT buff.0040131E
0040130A | 8DB6 00000000 LEA ESI,DWORD PTR DS:[ESI]
00401310 |> 8B51 04 MOV EDX,DWORD PTR DS:[ECX+4]
00401313 |. 8B01 MOV EAX,DWORD PTR DS:[ECX]
00401315 |. 83C1 08 ADD ECX,8
00401318 |. 0182 00004000 ADD DWORD PTR DS:[EDX+400000],EAX
0040131E |> 81F9 F0304000 CMP ECX,buff.004030F0
00401324 |.^72 EA JB SHORT buff.00401310
00401326 |. 5D POP EBP
00401327 \. C3 RETN
00401328 90 NOP
00401329 90 NOP
0040132A 90 NOP
0040132B 90 NOP
0040132C 90 NOP
Здесь я попытался прокомментировать все, что я мог понять, что я не мог разобрать, где поместить контрольную точку для наблюдения эффекта ввода. Я хочу контролировать вызовы и возвращать вызовы. Заранее спасибо ... Kriss
Спасибо большое Guantram. Я попробую, как ты сказал. BTW Я использую компилятор Turbo-C3. Есть ли способ заставить компилятор или отладчик Immunity включать функциональные строки (используемые в C) в машинный код также (или любой трюк для идентификации)? Я мог видеть, что Debugger включает несколько C-кодов. На самом деле я начинаю изучать отладку и реверсирование. Не могли бы вы рассказать о том, как мне это сделать? Спасибо ... – kriss
Turbo C 3? Я не могу поверить, что это, должно быть, прошло 20 лет с тех пор, как я использовал это последнее, и я уверен, что он не поддерживает 32 бит, которые использует ваш код сборки. Вы уверены, что используете Turbo C? Старая вещь Borland? –
Сначала я использовал компилятор DevShed-4.9.9.2, но я догадался, что он добавляет слишком много ассемблерного кода (он генерировал много кода для загрузки программы в память и после основной программы). Тогда я подумал попробовать попробовать TurboC3. – kriss