Wat is it? Это файл, выводящий информацию о PE EXE. Написан на Си. Удобно добавить в папку sendto, и помимо объекта "рабочий стол", "depositfiles", "virustotal", появится еще один пункт "отправить в 2.ехе", если нажимать на произвольный файл правой кнопкой мыши.
(через неделю после написания данного кодеса я открою для себя мир днищефорекса, и все заверт..)
Визуальный редактор LJ здорово порипал все переводы кареток, поэтому исходник выглядит монолитом. (был вынужден использовать виз-редактор, ибо сорец содержит спецсимволы, которые LJ не переваривает, если работать в обычном LJ редакторе)
Но там, в исходнике, нет ничего затейливого. Асмовый закоментированный кусок - фактически аналогичен строке
pe_hdr=* (int *) &buf[0x3c];
, следующей за этим закоментированным куском. :) Это называется "я не знаю как написать что-то на Си, поэтому пишу как умею, на асм"
С использованием указателей в Си завязаны тонны ненависти, так уж у меня повелось.
Рисунки:
так мы создаем sendto объект. сначала создаем обычный ярлык, затем делая пуск-выполнить "sendto", открываем сокровенную папку sendto, в которую копируем этот ярлык.

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

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

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

Как видите, ничего сложного. Читаем доку по формату Portable Exe, вколачиваем в неособо умный сорец, получаем результат.
(через неделю после написания данного кодеса я открою для себя мир днищефорекса, и все заверт..)
#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, вколачиваем в неособо умный сорец, получаем результат.