?

Log in

No account? Create an account
 
 
14 Январь 2013 @ 19:42
Общая схема активации консоли в Mass Effect 1 / 2 / ...  
Открываем дизассемблером 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

Итог: активация отключенной разработчиками консоли по тильде [~].
 
 
 
Ursus: Дукузharmala on Январь, 14, 2013 18:28 (UTC)
Моя думать, что в релизном коде не должно быть никаких
int 3
int 3

А, не, это выравнивание.
Нежный трепет имманентного духа: pic#63695660fr_noctis on Январь, 15, 2013 05:23 (UTC)
Разработчики думают иначе и не заморачиваются оптимизацией кода.