R0 CREW

Kaspersky keygenme

По поводу поиска обработчиков - можно извратиться, но это долгий путь. Хотите шары - LoadBitmapW (так загрузится картинка о правильном/неправильном серийнике).

Ну так это частный случай, и что бы это понять, нужно иследовать кряк. А я дал общий прием.

Ребят, помогите пожалуйста добрым советом,

ctxmd4.state[0] = 0x67452301u;
ctxmd4.state[1] = 0xEFCDAB89u;
ctxmd4.state[2] = 0x98BADCFEu;
ctxmd4.state[3] = 0x10325476u;
ctxmd4.total[0] = 0;
ctxmd4.total[1] = 0;

Вот это как я понял MD4Init? После сразу идет md4_update.

После этого идут какие то действия, до очередного md4_update. И вот тут проблема, у меня не получается собрать воедино картину, вроде мониторю входные и выходные параметры, но такое ощущение что просто результат записывается куда то в глобальные переменные, или еще куда то? Просто не получается увидеть цельную картину какие переменные куда идут и где и для чего юзаются… Может порекомендуете чего -нибудь …?

Разбирая крякми на одной машине, я решил перенести наработки на другую. Причём решил создать .map файл, т.к. нужно мне было перенести только имена. И тут сюрприз - создать-то мне ида создала этот файл, а вот загружать нечем. Скачал я плагин LoadMap, а он не работает. Пришлось скриптец маленький накодить:

with open(r’D:\Trash\xaker_crackme.txt’) as a:
for i in a:
x = i.split()
name = x[-1]
addr = int(‘0x’ + x[0].split(’:’)[-1],16) + 0x401000
MakeNameEx(addr,name,SN_NOWARN)

При первом осмотре люблю потрейсить программулинку, посмотреть что да как. Поэтому без заморочек поставил бряк на GetWindowTextW, после первого срабатывания зашёл в первый вызов, потом еще в один, нашёл подходящее ветвление и поставил за ним бряк.

А так вариант Борова рулит ))

Там между MD4-X функциями используются функции MIRACL, идентифицируй их и прочти описание на сайте производителя.

пробовал распаковать upx так:

Offtop

[/QUOTE]

Распаковал обычным -d все ок работает, отключил ASLR и DEP при помощи EMET и все.

Под катом скрин где запущены распакованный и нераспакованный

Offtop

Замечаю уже не в первом твоем скрипте. У тебя не ошибка, но можно не прибавлять префикс ‘0x’ вначале строки, оно и так отлично переведется. )

Может быть, я нуб в питоне. Так что спасибо.

Может кто знает, как заставить работать DbgWrite или idaapi.dbg_write_memory. А то ж они не патчат память в отлаживаемом приложении. Хотя как-то выборочно. Помню, как-то я их юзал, и они работали. А сейчас не работают.

Пока вышел из положения через жопу:

Hide
def Read(address,size):
a = array.array('B','')
i = 0
while i < size:
a.append(0)
i += 1
kernel = windll.kernel32
pointer = c_char_p(a[0])
kernel.WriteProcessMemory(kernel.GetCurrentProcess, address, pointer, size, 0)
return a

Хотя нет, пока не вышел. В общем-то, потому что скрипт идиотский. Ну вот куда я собрался записывать?

Ну не знаю, что у тебя за проблемы, но у меня отично отрабатывает этот скрипт.

Hide
import idaapi

def write(address, size):
buff = '\x00' * size
return idaapi.dbg_write_memory(address, buff)

if __name__ == '__main__':
address = idaapi.get_screen_ea()
size = 256
print '[*] write memory'
print '[*] address: %08X' % address
print '[*] size:', size
print '[*] result:', write(address, size)

А теперь снова пару замечаний )

  1. Пользуйся BB-кодами для кода (например )
  2. У тебя функция записи называется Read :slight_smile:

Странно, в окне дампа содержимое не меняется, хоть тресни, но вызовы отрабатывают. Ладно, что ж, буду дальше долбаться.

Ты вообще ищешь\читаешь документацию? )))
После записи обнови )

idaapi.refresh_debugger_memory()

Обновил, ничего не происходит.

После обновления перешёл по другому адресу в дампе, потом перешёл обратно, и только тогда обновилось содержимое.

Лучше скачать (чуть больше мегабайта), тамошний плеер очень пожал.
http://rghost.ru/private/57147869/5aeedb301e7796659ca452fca6ad4383

Ну да, у тебя сразу сапдейтилось. Я х.з. почему так. Но это не особо важно, может не апдейтиться, главное, чтоб модифицировалось.

Я, похоже, решил, что я самый хитрожопый, а потому стал брутить прямо в иде. Причём через её идапитоновские скриптовые возможности. Но не тут-то было - это, похоже, займёт норм так времени. Но не так, чтоб совсем нереально. Если будет всё сейчас совсем плохо, завтра оставлю на день брутиться. Это уже просто дело принципа - сбрутить именно так без рипа.

Похоже, что идапитоновский брут работает слишком медленно, нужно искать другие подходы. Всё ещё пока не свосем понимаю, что делать с рса. Т.е. у меня есть догадка, что фишка в этой маленькой e, которая может как-то меняться в зависимости от результатов предыдущих проверок. Вот если бы она стала равной, скажем, 1 - было бы чудесно. Но с тем, как она вычисляется, я пока не разобрался - видимо, неправильно определил вызовы из миракла.

ARCHANGEL, если сбрутишь - удивишь Ильфака)))