Взять данные из CreateProcess [Реверсинг]

Discussion in 'Реверсинг' started by V01T, 13 Dec 2009.

  1. V01T

    V01T New Member

    Joined:
    11 Jul 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Имеется вот такой кусочек программы ... создаётся CreateProcess и после выполнения FSTP QWORD PTR SS:[ESP]
    ST7 заполняется нужным значением ... вопрос как его от туда достать (Delphi или C++)

    Code:
    0040C766  |. 52             |PUSH EDX                                ; /<%5.1f>
    0040C767  |. DFAC24 8801000>|FILD QWORD PTR SS:[ESP+188]             ; |
    0040C76E  |. DF2D D8854600  |FILD QWORD PTR DS:[4685D8]              ; |
    0040C774  |. DEF9           |FDIVP ST(1),ST                          ; |
    0040C776  |. D80D B4024600  |FMUL DWORD PTR DS:[4602B4]              ; |
    0040C77C  |. DD1C24         |FSTP QWORD PTR SS:[ESP]                 ; |
    0040C77F  |. 68 3EFB4500    |PUSH precomp.0045FB3E                   ; |format = "%5.1f%%"
    0040C784  |. E8 57550200    |CALL <JMP.&msvcrt.printf>               ; \printf
    И да ... CALL <JMP.&msvcrt.printf> выполнять не принципиально так как окно не создаётся а лишь висит как фоновый процесс и отображать данные не нужно так как их нужно взять от туда и использовать их (данные) в своих целях

    Понимаю что надо делать инжект своей процедуры ... но вопрос что и как сделать
     
    #1 V01T, 13 Dec 2009
    Last edited: 13 Dec 2009
  2. IgAlex

    IgAlex Member

    Joined:
    17 Nov 2008
    Messages:
    36
    Likes Received:
    27
    Reputations:
    8
    Ну вообще fstp инструкция сохраняет значение из ST(0) сопроцессора в приемник (в твоем случае QWORD PTR SS:[ESP]). Посему, твоя работа будет заключаться в чтении значения QWORD PTR SS:[ESP]. Для этого можешь воспользоваться двумя методами:
    a) Если для тебя и для программы непринципиально пускать последнюю под отладчиком, то тебя спасет Int 3 бряк на 0040C77F, для чего используй "мелкософтовский" Debug API. Отладчик твой займет строк 30 в C-коде. по бряку, читаешь QWORD по esp и у тебя вруках нужное значение.
    b) Если принципиально, то подгружай свой код (например через реестр - AppInitDLL), который будет править код, например, по адресу 0x0040C77F jump-ом на твой код (сохранив при этом инструкцию по этому адресу 0040C77F), который прочитает нужное тебе значение и передаст уравление обратно. Естественно, может быть куча подводных камней, которые нужно смотреть под дебагером. Суть идеи, думаю, тебе понятна.