jun'2010

Jan. 20th, 2017 09:48 pm
ewoke: (Default)
[personal profile] ewoke
Wat is it? Это файл, выводящий информацию о PE EXE. Написан на Си. Удобно добавить в папку sendto, и помимо объекта "рабочий стол", "depositfiles", "virustotal", появится еще один пункт "отправить в 2.ехе", если нажимать на произвольный файл правой кнопкой мыши.

(через неделю после написания данного кодеса я открою для себя мир днищефорекса, и все заверт..)

#include "stdafx.h"
#include <malloc.h>
#include <conio.h>
int main(int argc, char* argv[])
{
FILE *fp;
char *buf;
int siize,pe_hdr,ep_virt,l,opt_hdr_size,sect_raw_off,sect_virt_off,sect_num,sect_virt_size;
fp=fopen(/*"*c:\\temp\\file.ex_"*/argv[1],"rb");
fseek(fp, 0, SEEK_END);
siize = ftell(fp);
fseek(fp, 0, SEEK_SET);
if (siize>262144){
puts("Too big"); goto out2;}
buf=(char *) malloc(siize);
fread(buf,siize,1,fp);
if (buf[0]=='M' && buf[1]=='Z');
else {puts("Not an exe"); goto outt;}
/* _asm {
push edi
push ebx
mov eax,0x3c
mov edi,buf
mov ebx,[edi+eax]
mov k,ebx
pop ebx
pop edi}*/
pe_hdr=* (int *) &buf[0x3c];
if (pe_hdr>siize){puts("blah"); goto outt;}
if(buf[pe_hdr]=='P'&& buf[pe_hdr+1]=='E');
else {puts ("Not PE"); goto outt; }
ep_virt=* (int *) &buf[pe_hdr+0x28];
printf ("EP (virt) %x\n",ep_virt);
printf ("kolvo secciy %x\n",l=*(__int16  *) &buf[pe_hdr+6]);
opt_hdr_size=* (__int16 *) &buf[pe_hdr+0x14];
for(sect_num=0;sect_num!=l;sect_num++){
printf ("raw offset %x\n", sect_raw_off=* (int *) &buf[pe_hdr+0x18+opt_hdr_size+0x14+sect_num*0x28]);
printf ("virt offset %x\n", sect_virt_off=* (int *) &buf[pe_hdr+0x18+opt_hdr_size+0xc+sect_num*0x28]);
printf("virt size %x\n",sect_virt_size=*(int *) &buf[pe_hdr+0x18+opt_hdr_size+8+sect_num*0x28]);
if(ep_virt>=sect_virt_off && ep_virt<(sect_virt_off+sect_virt_size)){
printf("EP raw %x",sect_raw_off+(ep_virt-sect_virt_off));
break;}
}
outt:
free(buf);
out2:
fclose(fp);
getch();
return 0;
}


Визуальный редактор LJ здорово порипал все переводы кареток, поэтому исходник выглядит монолитом. (был вынужден использовать виз-редактор, ибо сорец содержит спецсимволы, которые LJ не переваривает, если работать в обычном LJ редакторе)

Но там, в исходнике, нет ничего затейливого. Асмовый закоментированный кусок - фактически аналогичен строке

pe_hdr=* (int *) &buf[0x3c];

, следующей за этим закоментированным куском. :) Это называется "я не знаю как написать что-то на Си, поэтому пишу как умею, на асм"

С использованием указателей в Си завязаны тонны ненависти, так уж у меня повелось.

Рисунки:

так мы создаем sendto объект. сначала создаем обычный ярлык, затем делая пуск-выполнить "sendto", открываем сокровенную папку sendto, в которую копируем этот ярлык.



так выглядит операция по отправке на (в?)



файл обработан и выведен отчет о его содержимом



проверим EP (entry point) файла, загрузив его в OllyDbg. действительно, 1020.




Как видите, ничего сложного. Читаем доку по формату Portable Exe, вколачиваем в неособо умный сорец, получаем результат.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

ewoke: (Default)
ewoke

October 2025

S M T W T F S
   1234
5 67891011
121314 15161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 21st, 2026 07:53 am
Powered by Dreamwidth Studios