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

 eXeL@B —› Вопросы новичков —› Сохранение результата в файл
Посл.ответ Сообщение

Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 11 апреля 2010 17:59
· Личное сообщение · #1

Форумчане выручайте. Вкратце взгляните на . А теперь по полной допустим имеется прога которая юзает свою dll, dll используется для генерации рандомных значений возвращает результат в eax(на рисунке это 004B1000), но потом всё это дело шифрует. И вот тут проблема КАК ВСЁ ЭТО ДОБРО (20814 байт) засейвить чистеньким (т.е. до шифрования) в виде текста и делать это каждый раз при запуске этой проги? Предполагаю что нужен инжект или хук но без исходника не разберусь если у кого есть применимо к этому случаю буду очень благодарен если поделитесь.




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

Создано: 11 апреля 2010 21:23
· Личное сообщение · #2

Простейший перехват функции из длл и запись в файл конечного результата, гугл тебе в зубы и мсдн. Сложности вообще не вижу. Или вопроса не понял.



Ранг: 6.0 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 12 апреля 2010 12:53 · Поправил: Spirt_Fire
· Личное сообщение · #3

Год назад делал что то подобное. Делал jmp на свой код (дописывал в конце кода)

Code:
  1. 004B299A   > \60            PUSHAD
  2. 004B299B   .  50            PUSH EAX
  3. 004B299C   .  57            PUSH EDI
  4. 004B299D   .  8BF8          MOV EDI, EAX
  5. 004B299F   .  B9 FFFFFFFF   MOV ECX, -1
  6. 004B29A4   .  B0 00         MOV AL, 0
  7. 004B29A6   .  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
  8. 004B29A8   .  2BF8          SUB EDI, EAX
  9. 004B29AA   .  8BDF          MOV EBX, EDI
  10. 004B29AC   .  5F            POP EDI
  11. 004B29AD   .  58            POP EAX
  12. 004B29AE   .  8BF0          MOV ESI, EAX
  13. 004B29B0      90            NOP
  14. 004B29B1      90            NOP
  15. 004B29B2      6A 00         PUSH 0
  16. 004B29B4      6A 00         PUSH 0
  17. 004B29B6      6A 02         PUSH 2
  18. 004B29B8      6A 00         PUSH 0
  19. 004B29BA      6A 01         PUSH 1
  20. 004B29BC      68 00000040   PUSH 40000000
  21. 004B29C1      6A 00         PUSH 0
  22. 004B29C3      FF15 BC224D00 CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]     ; kernel32.CreateFileA
  23. 004B29C9      A3 F0FA4C00   MOV DWORD PTR DS:[4CFAF0], EAX
  24. 004B29CE      6A 00         PUSH 0
  25. 004B29D0      68 00010000   PUSH 100
  26. 004B29D5      53            PUSH EBX
  27. 004B29D6      56            PUSH ESI
  28. 004B29D7      50            PUSH EAX
  29. 004B29D8      FF15 44244D00 CALL DWORD PTR DS:[<&KERNEL32.WriteFile>]       ; kernel32.WriteFile
  30. 004B29DE      FF35 F0FA4C00 PUSH DWORD PTR DS:[4CFAF0]
  31. 004B29E4      FF15 B0224D00 CALL DWORD PTR DS:[<&KERNEL32.CloseHandle>]     ; kernel32.CloseHandle
  32. 004B29EA      61            POPAD


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



Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 13 апреля 2010 02:35 · Поправил: neoBlinXaker
· Личное сообщение · #4

Archer не сомневаюсь что для тебя сейчас это кажется проще пареной репы, но ведь и ты тоже не родился с этими знаниями. В программировании я ещё не силён пока тяжко дается, поэтому и прошу помощи. Нашёл этот исходник как по вашему подойдёт? Если подойдёт, то подсобите как его переделать, ясно что надо добавить CreateFile,WriteFile,CloseHandle и ещё что-то, но вот куда это здесь воткнуть пока ума не приложу. Как я правильно понял если делать инжект получится привязка к проге а если хук то привязки не будет, это так?

Code:
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <Dbghelp.h>
  4.  
  5. #pragma comment(lib,"Dbghelp.lib")
  6.  
  7. /************************************************************/
  8. char *szHookModName = "USER32.dll" ;
  9. char *szHookFunName = "MessageBoxA" ;
  10. char *szModName = NULL ;
  11. char *szHacked = "MessageBoxA() has been hooked!" ;
  12. DWORD dwHookFun ;
  13. DWORD dwHookApiAddr ;
  14. DWORD *dwCurAddr ;
  15. DWORD dwOldProtect ;
  16. PIMAGE_IMPORT_DESCRIPTOR pImportDesc ;
  17. PIMAGE_THUNK_DATA32 pImageThunkData ;
  18. MEMORY_BASIC_INFORMATION mbi ;
  19. ULONG uSize ;
  20. /************************************************************/
  21.  
  22. void Hooked()
  23. {
  24.  __asm
  25.  {
  26.   mov  esp,ebp
  27.   push szHacked
  28.   pop  DWORD PTR [ebp+12]
  29.   pop  ebp
  30.   jmp dwHookApiAddr
  31.  }
  32. }
  33.  
  34. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
  35. {
  36.  HMODULE hUser32 = LoadLibrary(szHookModName) ;
  37.  
  38.  if (hUser32 == NULL)
  39.  {
  40.   printf("Load User32.dll failed!\n") ;
  41.   return -1 ;
  42.  }
  43.  dwHookFun = (DWORD)Hooked ;
  44.  
  45.  dwHookApiAddr = (DWORD)GetProcAddress(hUser32,szHookFunName) ;
  46.  
  47.  pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hInstance,
  48.                  TRUE,
  49.                  IMAGE_DIRECTORY_ENTRY_IMPORT,
  50.                  &uSize) ;
  51.  
  52.  while(pImportDesc->Name)
  53.  {
  54.   szModName = (char *)((PBYTE)hInstance+pImportDesc->Name) ;
  55.   if (strcmp(szModName,szHookModName)==0)
  56.   {
  57.    break ;
  58.   }
  59.   pImportDesc++ ;
  60.  }
  61.  pImageThunkData = (PIMAGE_THUNK_DATA32)((PBYTE)hInstance+pImportDesc->FirstThunk) ;
  62.  
  63.  while(pImageThunkData->u1.Function)
  64.  {
  65.   dwCurAddr = &pImageThunkData->u1.Function ;
  66.   if (*dwCurAddr == dwHookApiAddr)
  67.   {
  68.    VirtualQuery(dwCurAddr,&mbi,sizeof(MEMORY_BASIC_INFORMATION)) ;
  69.    VirtualProtect(mbi.BaseAddress,mbi.RegionSize,PAGE_READWRITE,&mbi.Prot  ect) ;
  70.    
  71.    *dwCurAddr = dwHookFun ;
  72.    VirtualProtect(mbi.BaseAddress,mbi.RegionSize,mbi.Protect,&dwOldProtec  t) ;
  73.    break ;
  74.   }
  75.   pImageThunkData++ ;
  76.  }
  77.  
  78.  MessageBoxA(0,"NOT HOOKED!","ALERT",0) ;
  79.  
  80.  return 0 ;
  81. }



to Spirt_Fire
Приведу участок кода:
004086A8 /$ 55 PUSH EBP
004086A9 |. 8BEC MOV EBP,ESP
004086AB |. 83C4 AC ADD ESP,-54
004086AE |. B8 8C2F4B00 MOV EAX,004B2F8C
004086B3 |. 53 PUSH EBX
004086B4 |. 56 PUSH ESI
004086B5 |. 57 PUSH EDI ; ntdll.7C910738
004086B6 |. E8 596C0800 CALL 0048F314
004086BB |. 33F6 XOR ESI,ESI
004086BD |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004086C0 |. 50 PUSH EAX ; /FileName = NULL
004086C1 |. E8 A67E0A00 CALL <JMP.&KERNEL32.LoadLibraryA> -----Здесь загрузка этой длл
004086C6 |. 8BD8 MOV EBX,EAX
004086C8 |. 85DB TEST EBX,EBX
004086CA |. 74 68 JE SHORT 00408734
004086CC |. 68 382E4B00 PUSH 004B2E38 ; /ProcNameOrOrdinal =
004086D1 |. 53 PUSH EBX ; |hModule = 7FFDF000
004086D2 |. E8 D57D0A00 CALL <JMP.&KERNEL32.GetProcAddress> ------Получает адрес функции которая генерирует рандомные значения
004086D7 |. 8BF8 MOV EDI,EAX
004086D9 |. 68 442E4B00 PUSH 004B2E44 ; /ProcNameOrOrdinal =
004086DE |. 53 PUSH EBX ; |hModule = 7FFDF000
004086DF |. E8 C87D0A00 CALL <JMP.&KERNEL32.GetProcAddress> ------Получает адрес функции которая затем шифрует
004086E4 |. 8945 AC MOV DWORD PTR SS:[EBP-54],EAX
004086E7 |. 85FF TEST EDI,EDI ; ntdll.7C910738
004086E9 |. 0F95C0 SETNE AL
004086EC |. 83E0 01 AND EAX,1
004086EF |. 8BF0 MOV ESI,EAX
004086F1 |. 85C0 TEST EAX,EAX
004086F3 |. 74 39 JE SHORT 0040872E
004086F5 |. 66:C745 C0 08>MOV WORD PTR SS:[EBP-40],8
004086FB |. 68 48204C00 PUSH 004C2048
00408700 |. FFD7 CALL NEAR EDI -----ВОТ ОН ВЫЗОВ ФУНКЦИИ(АДРЕC ПОЛУЧЕН ВЫШЕ 004086D2) КОТОРЫЙ ВЕРНЕТ В ЕАХ ЗНАЧЕНИЕ 004B1000
00408702 |. 50 PUSH EAX -----Здесь как я понял делаем инжект
00408703 |. 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C] ; |
00408706 |. 52 PUSH EDX ; |Arg1 = 7C90EB94
00408707 |. E8 C40E0000 CALL 004095D0
0040870C |. 83C4 0C ADD ESP,0C

делаю так

00408700 |. FFD7 CALL NEAR EDI ; ntdll.7C910738
00408702 E9 61860A00 JMP 004B0D68 Прыжок на инжект
00408707 |. E8 C40E0000 CALL 004095D0

а вот это куда девать?
00408702 |. 50 PUSH EAX -----Здесь как я понял делаем инжект
00408703 |. 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C] ; |
00408706 |. 52 PUSH EDX
сразу вставлять в начало инжекта или в конец? Или это без разницы куда вставить.

Пока только создаётся файл а дальше крешится прога на этом участке кода(из твоего кода)?
004B29C9 A3 F0FA4C00 MOV DWORD PTR DS:[4CFAF0], EAX
Адрес приёмник разумеется я поправил на свой в пустую часть где нет кода.

А это обязательно добавлять?

004B299A > \60 PUSHAD
004B299B . 50 PUSH EAX
004B299C . 57 PUSH EDI
004B299D . 8BF8 MOV EDI, EAX
004B299F . B9 FFFFFFFF MOV ECX, -1
004B29A4 . B0 00 MOV AL, 0
004B29A6 . F2:AE REPNE SCAS BYTE PTR ES:[EDI]
004B29A8 . 2BF8 SUB EDI, EAX
004B29AA . 8BDF MOV EBX, EDI
004B29AC . 5F POP EDI
004B29AD . 58 POP EAX
004B29AE . 8BF0 MOV ESI, EAX
004B29B0 90 NOP
004B29B1 90 NOP



Ранг: 6.0 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 13 апреля 2010 12:35 · Поправил: Spirt_Fire
· Личное сообщение · #5

Прошу прощения вчера привел код который был в процессе разработки.
Сегодня нашел ту прогу, выдернул из нее код нормальный, добавил коментарии (что помню).
Начальную часть тебе писать не надо, это я вычислял сколько байт нужно записать, потому что кол-во выходных данных менялось. Поскольку ты знаешь начало буфера и сколько писать, задай конкретно в параметрах функции. Самое главное, в конце не забудь выровнять стек(если будешь туда что то для своих нужд пихать), что бы он был такой же как до твоего прыжка.
Думаю коментарии будут понятны.
Code:
  1. 004B0D80   > \60            PUSHAD
  2. 004B0D81   .  50            PUSH EAX
  3. 004B0D82   .  57            PUSH EDI
  4. 004B0D83   .  8BF8          MOV EDI, EAX
  5. 004B0D85   .  B9 FFFFFFFF   MOV ECX, -1
  6. 004B0D8A   .  B0 00         MOV AL, 0
  7. 004B0D8C   .  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
  8. 004B0D8E   .  2BF8          SUB EDI, EAX
  9. 004B0D90   .  8BDF          MOV EBX, EDI
  10. 004B0D92   .  5F            POP EDI
  11. 004B0D93   .  58            POP EAX
  12. 004B0D94   .  8BF0          MOV ESI, EAX
  13. 004B0D96      50            PUSH EAX                                               ; сохраняем регистры перед заданием имени
  14. 004B0D97      53            PUSH EBX
  15. 004B0D98      B8 72656164   MOV EAX, 64616572                            ;задаем имя
  16. 004B0D9D      BB 2E747874   MOV EBX, 7478742E                            ;файла "read.txt"
  17. 004B0DA2      A3 007E4C00   MOV DWORD PTR DS:[4C7E00], EAX         ;размещаем его по этому адресу
  18. 004B0DA7      891D 047E4C00 MOV DWORD PTR DS:[4C7E04], EBX
  19. 004B0DAD      5B            POP EBX                                                        ;восстанавливаем регистры
  20. 004B0DAE      58            POP EAX
  21. 004B0DAF      6A 00         PUSH 0
  22. 004B0DB1      6A 00         PUSH 0
  23. 004B0DB3      6A 02         PUSH 2
  24. 004B0DB5      6A 00         PUSH 0
  25. 004B0DB7      6A 01         PUSH 1
  26. 004B0DB9      68 00000040   PUSH 40000000
  27. 004B0DBE      68 007E4C00   PUSH blabla.004C7E00                      ; ASCII "read.txt"
  28. 004B0DC3      FF15 C4A24C00 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; kernel32.CreateFileA
  29. 004B0DC9      A3 107E4C00   MOV DWORD PTR DS:[4C7E10], EAX           ; сюда хендл
  30. 004B0DCE      6A 00         PUSH 0
  31. 004B0DD0      68 207E4C00   PUSH blabla.004C7E20                      ; сюда будет помещаться кол-во байт
  32. 004B0DD5      90            NOP                    ; записанных функцией
  33. 004B0DD6      53            PUSH EBX                                   ; СКОЛЬКО БАЙТОВ НУЖНО ЗАПИСАТЬ
  34. 004B0DD7      56            PUSH ESI                                   ; начало откуда писать
  35. 004B0DD8      50            PUSH EAX                                    ; хендл фала куда пишешь
  36. 004B0DD9      FF15 40A44C00 CALL DWORD PTR DS:[<&KERNEL32.WriteFile>>; kernel32.WriteFile
  37. 004B0DDF      FF35 107E4C00 PUSH DWORD PTR DS:[4C7E10]                      ; указываем хендл
  38. 004B0DE5      FF15 B8A24C00 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; kernel32.CloseHandle
  39. 004B0DEB      61            POPAD
  40. 004B0DEC      50            PUSH EAX                                   ;восстанавливаем затертые команды
  41. 004B0DED      8D55 D4       LEA EDX, DWORD PTR SS:[EBP-2C]
  42. 004B0DF0      52            PUSH EDX
  43. 004B0DF1    ^ E9 1179F5FF   JMP blabla.00408707
  44.  


Забыл сказать. Желательно чтобы эти функции были в импорте твоей проги, а иначе придется добавлят вручную.



Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 13 апреля 2010 22:39
· Личное сообщение · #6

Spirt_Fire БОЛЬШОЕ СПАСИБО теперь всё работает, пришлось немножко повозиться ну я так и расчитывал.
Хочется опробовать два метода. Теперь хотелось бы разобраться с хуком, Archer почему то молчит. Если кто сможет помочь, то пишите не стесняйтесь.



Ранг: 6.0 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 14 апреля 2010 04:36
· Личное сообщение · #7

С хуками еще сталкиваться не доводилось, так что если реализуешь, не забудь поделиться опытом!




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

Создано: 14 апреля 2010 17:25
· Личное сообщение · #8

А что я должен сказать про хук то? Их там воз и маленькую тележку сделать можно: патч тупо jmp, патч импорта, патч экспорта, подмена длл, статьи на это дело есть по перехвату функций, хотя бы того же Рема. Я не понимаю, чего от меня то ждать.



Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 14 апреля 2010 18:16
· Личное сообщение · #9

Archer теорией сыт уже, хотелось бы практической помощи ведь я уже сказал что в программировании не силён,а изучать учебники изза одного едиственного хука это дурость, конкретно по исходнику можешь помочь?



Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 14 апреля 2010 19:08
· Личное сообщение · #10

сей код из библиотеки

Code:
  1. 0037DE00 >/$  55            PUSH EBP
  2. 0037DE01  |.  8BEC          MOV EBP,ESP
  3. 0037DE03  |.  83C4 D4       ADD ESP,-2C
  4. 0037DE06  |.  B8 C01B3900   MOV EAX,00391BC0
  5. 0037DE0B  |.  E8 C42D0000   CALL 00380BD4
  6. 0037DE10  |.  68 30010000   PUSH 130                                 ; /Arg1 = 00000130
  7. 0037DE15  |.  E8 1A190000   CALL 0037F734    \После этого вызова в eax значение в которое будут заполняться  рандомные значения                       
  8. 0037DE1A  |.  59            POP ECX                                  ; ntdll.7C9011A7
  9. 0037DE1B  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
  10. 0037DE1E  |.  85C0          TEST EAX,EAX
  11. 0037DE20  |.  74 21         JE SHORT 0037DE43
  12. 0037DE22  |.  66:C745 E8 14>MOV WORD PTR SS:[EBP-18],14
  13. 0037DE28  |.  68 50340300   PUSH 33450                               ; /Arg2 = 00033450
  14. 0037DE2D  |.  FF75 FC       PUSH DWORD PTR SS:[EBP-4]                ; |Arg1 = 001A21A0
  15. 0037DE30  |.  E8 43000000   CALL 0037DE78                           
  16. 0037DE35  |.  83C4 08       ADD ESP,8
  17. 0037DE38  |.  66:C745 E8 08>MOV WORD PTR SS:[EBP-18],8
  18. 0037DE3E  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
  19. 0037DE41  |.  EB 03         JMP SHORT 0037DE46
  20. 0037DE43  |>  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
  21. 0037DE46  |>  8915 28493900 MOV DWORD PTR DS:[394928],EDX
  22. 0037DE4C  |.  E8 2B010000   CALL 0037DF7C
  23. 0037DE51  |.  FF35 28493900 PUSH DWORD PTR DS:[394928]               ; /Arg1 = 00000000
  24. 0037DE57  |.  E8 34010000   CALL 0037DF90        \ После этого в eax уже заполненая  область с рандомными значениями                   
  25. 0037DE5C  |.  59            POP ECX                                  ; ntdll.7C9011A7
  26. 0037DE5D  |.  FF35 28493900 PUSH DWORD PTR DS:[394928]               ; /Arg1 = 00000000
  27. 0037DE63  |.  E8 5C020000   CALL 0037E0C4                            
  28. 0037DE68  |.  59            POP ECX                                  ; ntdll.7C9011A7
  29. 0037DE69  |.  8B4D D8       MOV ECX,DWORD PTR SS:[EBP-28]            ; ntdll.7C91D5A4
  30. 0037DE6C  |.  64:890D 00000>MOV DWORD PTR FS:[0],ECX
  31. 0037DE73  |.  8BE5          MOV ESP,EBP
  32. 0037DE75  |.  5D            POP EBP                                  ; ntdll.7C9011A7
  33. 0037DE76  \.  C3            RETN




Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 15 апреля 2010 06:10 · Поправил: NikolayD
· Личное сообщение · #11

на всякий случай статья по инжекту --> cracklAB.RU <-- и здесь тоже для тебя --> "Движки для установки перехватов" <--



Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 19 апреля 2010 01:11
· Личное сообщение · #12

NikolayD спасибо конечно но я это уже видел. ЕЩЁ РАЗ ФОРУМЧАНЕ У КОГО ЕСТЬ ИСХОДНИК ХУКА С ФУНКЦИЕЙ СОХРАНЕНИЯ В ФАЙЛ прошу выложить или КТО СМОЖЕТ ПОМОЧЬ ДОРАБОТАТЬ ИСХОДНИК ИЗ МОЕГО ; ПОСТА также прошу помочь, если Archer пишет:
Простейший перехват функции из длл и запись в файл конечного результата, гугл тебе в зубы и мсдн. Сложности вообще не вижу.
, странно однако никто помочь не может, похоже что это не так.



Ранг: 6.0 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 19 апреля 2010 06:59 · Поправил: Spirt_Fire
· Личное сообщение · #13

Здесь смотрел? --> Link <--




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

Создано: 19 апреля 2010 17:16
· Личное сообщение · #14

Да нет, просто никто не хочет делать твою работу за тебя. Детский сад этот стал меня мальца утомлять. Уже всё кинули, он всё не успокаивается и канючит вместо того, чтобы головой подумать.
Берёшь и пишешь длл с функцией/базонезависимый кусок кода, который пишет в файл (CreateFile, WriteFile, CloseHandle). Если скажешь, что примера кода записи в файл нет нигде, я тебя забаню на веки вечные. Потом длл/кусок кода пишешь в нужное место, перехват функций тебе в зубы. Если скажешь, что перехвата функций нигде нет, читай выше. В чём проблема-я вообще не понимаю. Видимо, врождённая лень.


 eXeL@B —› Вопросы новичков —› Сохранение результата в файл
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати