Сейчас на форуме: Magister Yoda, johnniewalker, Kybyx, vsv1, r0lka, -Sanchez- (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› Помогите разобраться с функцией
Посл.ответ Сообщение

Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 03:40
· Личное сообщение · #1

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

XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-DJVG

Последние буковки жестко задаются. А функция вот эта:

int res = VBinstall_lic(code, name, company, str1, str2 str3, str4);

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

a843_29.10.2010_CRACKLAB.rU.tgz - XLSTATCR1C.rar




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 30 октября 2010 08:44
· Личное сообщение · #2

VB - вижуал бейсик? посмотрите как у него функции вызываются вообще
там помоему есть какойто ньюанс



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 30 октября 2010 10:07
· Личное сообщение · #3

reversecode
Может уже закончите медитацией заниматься? Атач даже не смотрел, а уже VB узрел. Желание пофлудить или желание помочь?



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 30 октября 2010 10:14
· Личное сообщение · #4

Там говноmfc Ковыряццо в нем не айс

-----
SaNX




Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 30 октября 2010 12:00 · Поправил: HiEndsoft
· Личное сообщение · #5

SaNX пишет:
Там говноmfc Ковыряццо в нем не айс

И где там мфц?
функу getLicence ковырните.
После HexRays - в аттаче


1920_30.10.2010_CRACKLAB.rU.tgz - XLSTATCR1C.rar

-----
продавец резиновых утёнков




Ранг: 40.4 (посетитель), 3thx
Активность: 0.080
Статус: Участник

Создано: 30 октября 2010 12:05
· Личное сообщение · #6

reversecode
Хм, пеид показал:

Microsoft Visual C++ 8.0 DLL Method2

Вроде бы ничем не упаковано (только если сигна не пофиксена). Дело в другом.



Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 13:51
· Личное сообщение · #7

Это с++. Ничем не упакован. Префикс VB, видимо потому что из VB вызывается.

HiEndsoft
Ковыряние в getLicence ничего не дало.

Собственно моя проблема сейчас в том что я не могу понять какой calling convention у этой функции.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 30 октября 2010 14:06 · Поправил: Vamit
· Личное сообщение · #8

egorovshura пишет:
я не могу понять какой calling convention у этой функции

Это же просто - __stdcall
А со стеком там всё в порядке, даже Ида правильно проводит трассировку стека.
Пытаюсь вызвать ее из своей программы, но она валится.
А каким образом вы её вызываете, в экспорте она отсутствует.

-----
Everything is relative...




Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 14:28 · Поправил: egorovshura
· Личное сообщение · #9

__stdcall не получается. Функция что-то хитрое со стеком делает.

Вызываю так:
Code:
  1. typedef long (* __stdcall VBinstall_lic_Type)(LPSTR aCode, LPSTR aName, LPSTR aCompany, LPSTR GenPath, LPSTR GenLanguage, LPSTR GenUserPath, LPSTR PLSInstPath);
  2.  
  3.     long res = VBinstall_lic(code, name, company, GenPath, GenLanguage, GenUserPath, PLSInstPath);




Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 14:30
· Личное сообщение · #10

Она присутствует в экспорте



Ранг: 81.0 (постоянный), 88thx
Активность: 0.070.02
Статус: Участник

Создано: 30 октября 2010 14:31 · Поправил: uncleua
· Личное сообщение · #11

Какое-то время назад к 2010 версии вот этот ключ, видимо, подходил, но к сегодняшней не подходит...

egorovshura пишет:
Серийник по всей видимости выглядит таким образом

XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-DJVG


В 2009 версии ключ выглядел таким образом - ХХХХ-DJVG-ХХХХ-ХХХХ-ХХХХ-ХХХХ

http://www.bramjnet.com/vb3/showthread.php?t=938437



Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 14:48
· Личное сообщение · #12

Да. Там последние 4 символа кода проверяются простым сравнением строк. Непонятно зачем так сделано. В VBinstall_lic передается код уже без этих символов.



Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 14:49
· Личное сообщение · #13

uncleua пишет:
В 2009 версии ключ выглядел таким образом - ХХХХ-DJVG-ХХХХ-ХХХХ-ХХХХ-ХХХХ


Интересно. Хотя возможно и просто совпадение.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 30 октября 2010 14:52
· Личное сообщение · #14

egorovshura пишет:
Она присутствует в экспорте

Пардон, не заметил...
А что дебагером трудно посмотреть где падает?

-----
Everything is relative...




Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 14:59
· Личное сообщение · #15

Падает когда из функции возвращается. Ругается на испорченный стэк.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 30 октября 2010 16:28
· Личное сообщение · #16

Функция нормально отрабатывает и возврат из неё годный, только что сгенерил проект и проверил...
Посмотри в проекте, открыв Дизасм окно, есть ли после вызова функции это
add esp,1Ch
если есть, то будет ошибка.
Ты либу к проекту как цепляешь - динамически или статически?

-----
Everything is relative...




Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 16:55 · Поправил: egorovshura
· Личное сообщение · #17

add esp,1Ch есть.
Либу гружу динамически.
Получается что это не __stdcall? Какой у тебя calling convention? Или ты просто через push параметры передавал?



Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 17:06 · Поправил: egorovshura
· Личное сообщение · #18

Там еще перед выходом из функции вызывается интересная такая маленькая процедурка с вот таким кодом:

Code:
  1. 100294DA  cmp         ecx,dword ptr ds:[1003901Ch]  
  2. 100294E0  jne         100294E4  
  3. 100294E2  rep ret  


Мне кажется что она крышу идовскому анализатору сносит.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 30 октября 2010 17:11
· Личное сообщение · #19

egorovshura пишет:
Получается что это не __stdcall?

У тебя не __stdcall, а функция имеет именно это соглашение. Я не любитель динамической загрузки либ, всегда делаю статически. Если для либы нет h файла, то делаю обертку. Далее, стандартный __stdcall для этой функции выглядит следующим образом - _VBinstall_lic@28, в экспорте же либы имеем имя VBinstall_lic, следовательно нужно через def файл обертки изменить имя в импорте создаваемой проги и всё ОК. Вызываешь любую функцию из либы как свою родную.

-----
Everything is relative...




Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 30 октября 2010 17:25
· Личное сообщение · #20

Понял в чем проблема. У меня было

Code:
  1. typedef long ( * __stdcall VBinstall_lic_Type)(LPSTR aCode, LPSTR aName, LPSTR aCompany, LPSTR GenPath, LPSTR GenLanguage, LPSTR GenUserPath, LPSTR PLSInstPath);


а надо так

Code:
  1. typedef long (__stdcall * VBinstall_lic_Type)(LPSTR aCode, LPSTR aName, LPSTR aCompany, LPSTR GenPath, LPSTR GenLanguage, LPSTR GenUserPath, LPSTR PLSInstPath);


причем компилятор не ругался


 eXeL@B —› Крэки, обсуждения —› Помогите разобраться с функцией
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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