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

 eXeL@B —› Вопросы новичков —› IDA + Python
Посл.ответ Сообщение

Ранг: 1.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 сентября 2014 20:44 · Поправил: team_GTS
· Личное сообщение · #1

Привет всем.Читаю про Скрипты в IDA на Питоне.Предположим есть код.
Code:
  1. start:  lea eax,402000
  2.          mov bl,[eax]
  3.          xor bl,7Bh
  4.          mov [eax],bl
  5.          inc eax
  6.          cmp eax,dword ptr ds:[402032]
  7.          jnz start


Как в статике проксорить байты по этому адрессу? Я так понимаю скрипт будет небольшой.
Спасибо




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 23 сентября 2014 21:00
· Личное сообщение · #2

скрипт на нативном IDC, без плага IDA-python

auto addr;
addr = 0x402000;
for(;;) {
PatchByte(addr, Byte(addr)^0x7b);
addr=addr+1;
if(addr == Dword(0x402032)) break;
}

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 24 сентября 2014 00:30 · Поправил: =TS=
· Личное сообщение · #3

То же, Python:

Code:
  1. for addr in xrange(0x402000, Dword(0x402032)):
  2.     PatchByte(addr, Byte(addr) ^ 0x7B)


UPD. Поправил под первый пост и добавил под второй

Code:
  1. for addr in xrange(0x402000, 0x40384B):
  2.     PatchByte(addr, Byte(addr) ^ 0x7B)


-----
DREAMS CALL US


| Сообщение посчитали полезным: team_GTS

Ранг: 1.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 сентября 2014 22:56 · Поправил: team_GTS
· Личное сообщение · #4

Спасибо за ответы.

Вот как раз пример на эту тему.
Code:
  1. 00403E1B   B8 D8374000      MOV EAX,cbean's_.004037D8
  2. 00403E20   8A18             MOV BL,BYTE PTR DS:[EAX]
  3. 00403E22   80F3 7B          XOR BL,7B
  4. 00403E25   8818             MOV BYTE PTR DS:[EAX],BL
  5. 00403E27   40                INC EAX
  6. 00403E28   3D 4B384000      CMP EAX,cbean's_.0040384B
  7. 00403E2D  ^75 F1            JNZ SHORT cbean's_.00403E20
  8. 00403E2F  ^E9 A4F9FFFF      JMP cbean's_.004037D8

К этому участку кода я пишу скприт.

auto addr;

addr = 0x4037D8;
for(;;){
PatchByte(addr,Byte(addr) ^0x7B);
addr = addr +1;
if(addr == Dword(0x40384B)) break;
}

IDA скприпт выполняет и Байты изменяет.Но я получаю не тот результат который у меня получается в дебагере.Не пойму в чем дело вроде все оффсеты забиты правельно.



a7e3_24.09.2014_EXELAB.rU.tgz - cbean's kgm #1.rar




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 25 сентября 2014 00:11 · Поправил: OKOB
· Личное сообщение · #5

В первом посте не такая постановка, как в реальном коде.

cmp eax,dword ptr ds:[402032] - значение по адресу
и
00403E28 3D 4B384000 CMP EAX,cbean's_.0040384B - смещение

мой кодес нужно изменить так

auto addr;

addr = 0x4037D8;
for(;;){
PatchByte(addr,Byte(addr) ^0x7B);
addr = addr +1;
if(addr == 0x40384B) break;
}

в питоне предложено сразу под то, что в коде.

-----
127.0.0.1, sweet 127.0.0.1



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


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