Jan 14, 2013 19:42
Открываем дизассемблером MassEffect{n}.exe
Ищем по сигнатурам кусок типа этого:
.0056B46E: CC int 3
.0056B46F: CC int 3
.0056B470: 8B442404 mov eax,[esp][4]
.0056B474: 83400C01 add d,[eax][00C],1
.0056B478: 8B480C mov ecx,[eax][00C]
.0056B47B: 803941 cmp b,[ecx],041 ;'A'
.0056B47E: 751F jnz .00056B49F -- 1
.0056B480: 83C101 add ecx,1
.0056B483: 6A00 push 0
.0056B485: 89480C mov [eax][00C],ecx
.0056B488: 8B4808 mov ecx,[eax][8]
.0056B48B: 50 push eax
.0056B48C: FF15F40F2401 call d,[001240FF4]
.0056B492: 8B442408 mov eax,[esp][8]
Запоминаем смещение его начала ( в данном случае = 0x0056B470 ). В хранимом порядке это hex-строка: 70, B4, 56, 00.
Ищем похожий фрагмент, но с вариацией. Типа вот этого:
.00540CBF: CC int 3
.00540CC0: 8B442404 mov eax,[esp][4]
.00540CC4: 83400C01 add d,[eax][00C],1
.00540CC8: 8B480C mov ecx,[eax][00C]
.00540CCB: 803941 cmp b,[ecx],041 ;'A'
.00540CCE: 751F jnz .000540CEF -- 1
.00540CD0: 83C101 add ecx,1
.00540CD3: 6A00 push 0
.00540CD5: 89480C mov [eax][00C],ecx
.00540CD8: 8B4808 mov ecx,[eax][8]
.00540CDB: 50 push eax
.00540CDC: FF15F40F2401 call d,[001240FF4]
.00540CE2: 8B442408 mov eax,[esp][8]
.00540CE6: C70000000000 mov d,[eax],0
.00540CEC: C20800 retn 8 ; -^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
.00540CEF: 8B4C2408 1mov ecx,[esp][8]
.00540CF3: C70100000000 mov d,[ecx],0
.00540CF9: C20800 retn 8 ; -^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
.00540CFC: CC int 3
.00540CFD: CC int 3
Запоминаем начало куска процедуры (точку входа). В данном случае это 00540CC0. В хранимом порядке это hex-array-строка: C0, 0C, 54, 00.
Ищем эту строку в памяти от начала файла через сканирование по сигнатуре первого пункта = 70, B4, 56, 00). Найдя, меняем точку входа этой процедуры (перебиваем первую dword-сигнатуру на вторую) на найденную позднее: C0, 0C, 54, 00
Итог: активация отключенной разработчиками консоли по тильде [~].
трюк со скремблированным кодом