Помогите перевести на С++ Code: call ds:VirtualAlloc mov [edi], eax mov byte ptr [eax], 55h inc eax mov ecx, [esp+0Ch+arg_0] push 4 mov byte ptr [eax], 8Bh inc eax pop ebx mov byte ptr [eax], 0ECh inc eax mov byte ptr [eax], 68h inc eax mov [eax], ecx add eax, ebx cmp esi, 1 jl short loc_10001072 Собственно затруднения вызывает Code: mov byte ptr [eax], 55h inc eax
s0l_ir0n Code: SIZE_T v3; // ebx@1 int v4; // eax@7 void *v5; // edi@7 LPVOID v6; // eax@7 int v7; // eax@8 int v8; // eax@10 int v9; // edx@12 signed int v10; // ecx@12 int v11; // eax@13 int v12; // eax@14 v3 = 21; if ( a3 >= 1 ) v3 = 24; if ( a3 >= 2 ) v3 += 3; if ( a3 >= 3 ) v3 += 2 * (3 * a3 - 6); v5 = calloc(1u, 8u); v6 = VirtualAlloc(0, v3, 0x1000u, 0x40u); *(_DWORD *)v5 = v6; *(_BYTE *)v6++ = 0x55u; *(_BYTE *)v6++ = -117; *(_BYTE *)v6++ = -20; *(_BYTE *)v6++ = 104; *(_DWORD *)v6 = a1; HEX Rays выдал вот такое ... даже приведя к более лучшему виду *(BYTE *)v6++ = 0x55; получаю ошибку о неизвестном размере LPVOID
Цель: подредактировать одну программу (пропатчить), но дело таки в том, что нужно не просто к примеру поменять jz на jnz а вставить (выполнить) большой блок кода (в опред. месте программы), как это сделать? Проблема: я никогда не сталкивался с патчингом такого рода, следовательно не знаю как и куда сувать написаный блок кода (слышал что можно в конец дописать свой код, и где надо -> в конец с джампиться, но я с такой темой не знаком)
По прежнему топчусь на месте с реконструкцией данной DLL скачать можно с офф сайта Расскажите хотя принцип её работы или подскажите ссылочку с аналогичным решением ... просто не врубаюсь там ни чего не вписывается ни джампов ни вызовов
Code Snippet Creator (Iczelion) или находишь в самом конце секции кода блок заполненный нулями (нули там для выравнивания блока по границе 512,1024...) и пишешь туда свой код. можно и в другую секцию, (или добавить новую секцию) но не забудь поставить у нее атрибут code - чтобы код в этой секции мог исполняться
триал обычно сбрасывают при помощи trashreg или trialreset для всяких там asprotect и прочих армадилл но в данном случае это не тот случай Для новой установки программы после окончания триального срока надо сменить значение у параметра ComputerName в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName, а также в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName или можешь здесь взять лоадер: http://ifolder.ru/11538869
В реверсируемой программе используется куча дллок, я идой составил базу для нескольких, дал имена некоторым функциям и переменным, но отлаживать она позволяет только одну дллку, а там код скачет с одной на другую, и когда перескакивает на чужую длл вместо кода db, db, db, жутко неудобно. Можно ли как то подключить к иде idb-базы других файлов?
Поставлен бряк, когда я трассирую в ollydbg (без захода в call (f8)) через это место: http://img237.imageshack.us/img237/1655/16004672.png То срабатывает бряк (хотя бряк далеко впереди находится) Сам call ссылается сюда: http://img193.imageshack.us/img193/2200/94160035.png Так вот, мне не понятно, почему срабатывает бряк когда я прохожу через этот call? (с помощью f8) Еще хочу заметить что тут jne в call'е не срабатывает никогда Версия ollydbg: 2.00 (beta 3)
wolmer крутые картинки) ты уверен что call не выполняет тот код где стоит бряк? также нужно понимать что по F8 ставится бряк после кола и выполняется кол, может выход из него каким нибудь джампом, чорт знает куда, или ексепшон там гденить обрабатываеца и нет норм ретурна из функции, по этому так и получается. заходи в кол, и смотри что к чему там.
1. отключи плагины, может какие-то конфликтуют если не помагает пункт 2. качни чистубю ольку 110 с оффсайта 3. замечал такой момент "зависания" при маршалинге бывает (если в этой функции есть вызовы функций вроде RPC!xxx, OLE!yyy). если у тебя такой случай то тут лучше отлаживать не трейсом (F8) а проскакивать по F9, поставив заранее бряк после CALLа
Code: #include <iostream> using namespace std; int main() { char userPassw[50]; cout << "Enter the password" << endl; cin >> userPassw; if(!strcmp(userPassw, "error")) { cout << "REGISTERD!" << endl; } else { cout << "FAIL!" << endl; } system("pause"); return 0; } Написал простой крякмис. Тыркал его в ольке,вроде получилось сделать так,что бы сразу выводилось "REGISTRED",поменял адресс call. Попытался второй раз так сделать - нифига не получилось. Вопрос: Как такое сделать? В место этого адреса вот этого call: я писал адресс - 00401349 Code: 00401349 |. BA 19204400 MOV EDX,CrackMe.00442019 ; ASCII "REGISTERD!"
тебе этот момент надо найти и if(!strcmp(userPassw, "error")) усорвие перехода поменять с условного [jnz наприме] на безусловный [jmp] если ты конечно специально извращениями не занимашься
Да-да-да,извращения. Но понимаешь в чем соль? У меня получилось 1 раз как-то сделать тем способом,что я показывал. Хочу понять,где я теперь ошибаюсь
вы даже до кода вроде не добрались, это начало программы, этам инициализации и т.п. Откройте свою программу в IDA Pro дизассемблере и посмотрите там для начала ( а еще лучше добавьте при компилиции параметров для вывода asm листинга чтоб понять что и как в С коде переводится в asm.)