Русский / Russian English / Английский

Сейчас на форуме: Dart Raiden (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Крэки, обсуждения —› ArmAccess.dll
<< . 1 . 2 .
Посл.ответ Сообщение


Ранг: 207.4 (наставник)
Статус: Участник
Jeefo Recovery

Создано: 9 августа 2006 21:21 New!
Цитата · Личное сообщение · #1

Народ, кто знает, что за либа такая? Видел её только однажды, в одном из релизов 4.44 Армадиллы от китайцев. Почему спрашиваю, у меня есть одна прога, кот запакована армадиллой. Прогу распаковал, руками, все запускается, и работает, кроме одной нужной кнопки, при нажатии которой ничего не происходит. И тут натыкаюсь на релиз от одной команды, как раз для этой проги, а релиз представляет из себя SFX архив, распаковывающийся в папку с установленной прогой, и в архиве один единственный файл - ArmAccess.dll И инструкция, "Установите прогу, не перегружайтесь, распакуйте либу в папку, перегружайтесь, и наслаждайтесь" Никак не мог понять, как либа может сломать эту прогу, т.к. там она вообще лишняя, в папке такой нет (т.е. ничего не подменяется), и прога регается вообще с помощью кей файла. Т.е. фактически просто распаковка файла в папку. Ну думаю, дай попробую, распаковал, ребутнулся, и естественно ничего не произошло, прога от этого не зарегалась. Но что самое удивительное, так это то, что заработала та самая кнопка в моем распакованном ЕХЕ-шнике! Что это? Защита армы? И вообще, чего это за такой файл? И что самое интересное, в распакованном моем релизе, hardware ID подменяется глупой надписью, зашитой в эту самую либу. В нераспакованной проге этого нет.


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 11 августа 2006 16:09 New!
Цитата · Личное сообщение · #2

Johnson Finger
То есть хочешь подменить в либе функции чтоб програ работала как retail? Можно и без либы справиться. Посмотри что происходит с кнопкой и фикси. Если либу захочешь пофиксить палюбе надо будет разбираться, если конечно не прокатывает способ зумика


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 11 августа 2006 16:10 New!
Цитата · Личное сообщение · #3

Johnson Finger
Название библы вроде ене пишется. Надо искать MZ в началах участковпамяти. Хотя мож что-то путаю

Ранг: 160.9 (ветеран)
Статус: Участник

Создано: 11 августа 2006 16:48 New!
Цитата · Личное сообщение · #4

Находишь вызов APi арму из своей проги и идешь по этому адресу а там я думаю ты догадаешься.


Ранг: 207.4 (наставник)
Статус: Участник
Jeefo Recovery

Создано: 11 августа 2006 18:07 New!
Цитата · Личное сообщение · #5

То Rascal - нет, я хочу просто чтобы с помощью этой либы в распакованной проге у меня работала кнопка. Править её я не собираюсь. Может только немного косметики.
Просто при распаковке прога находится в вечном триале, кнопка активна, но т.к. либа отваливается вместе с распаковкой, то кнопка не работает, значет нужна эта либа. Коцать буду сам ЕХЕ-шник.
Или буду корректировать запротекченную прогу, как я уже говорил, триальные файлы она уже перестала сбрасывать и определять по ним срок триала, и в реестре в одном месте перестала вставлять свой ключи. Осталось еще совсем чуть-чуть.....
А на счёт MZ надо попробовать..... Способ зумика пока не прокатит т.к. либы еще нет на руках.....
То Cigan попробуем


Ранг: 500.6 (!)
Статус: Участник

Создано: 11 августа 2006 18:45 New!
Цитата · Личное сообщение · #6

Johnson Finger

Ты прогу распаковываеш руками или анпакером?


Ранг: 207.4 (наставник)
Статус: Участник
Jeefo Recovery

Создано: 11 августа 2006 20:35 New!
Цитата · Личное сообщение · #7

То NIKOLA и так и так пробовал.... Вначале руками, но после этих приколов с кнопкой, подумал, что мож я чего-то косячю, и попробовал анпакерами (двумя), эффект один и тот же


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 11 августа 2006 20:44 New!
Цитата · Личное сообщение · #8

Johnson Finger
Понял теперь. В запакованной проге кнопка работает. Распакованная нет. Это может быть и проверка на распакеованность самой проги ;) Делай лоадер лучше, или полностью распаковывай и ищи баги. Если библы нет то апи не вызваются, вот и надо найти места вызовов и записать туда нужные возвращаемые значения. Тогда всё ок будет, если не провереятся на распакованность

Ранг: 62.8 (постоянный)
Статус: Участник

Создано: 11 августа 2006 20:47 New!
Цитата · Личное сообщение · #9

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


Ранг: 207.4 (наставник)
Статус: Участник
Jeefo Recovery

Создано: 11 августа 2006 21:58 New!
Цитата · Личное сообщение · #10

То Rascal - алилуйя, брат! Наконец-то не думаю что это проверка, если я правильно понял, то при запаковке армой, она добавляет туда еще и свою либу, из которой и беруться неодходимые апи функции, а кнопка завязана именно на них, т.к. после истечения триала она становится неактивной, в триальном режиме она отлично работает, но в распакованной активна, но при нажатии ничего не происходит....
Лоадер этого не стоит, все равно делать Ретайл версию, его как вариант, можно будет юзать только для убийства последнего триального ключа.
Ладно, как бы там нибыло, в принципе, путь работы я уже себе наметил, всем ответившим огромное спасибо.


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 11 августа 2006 23:39 New!
Цитата · Личное сообщение · #11

Johnson Finger
Ну про либу я знал. В первом же ответе мог это заметить ;) Да и по рейтингу мона догадаться ;))

А на счёт отсутствия проверки распакованности - это можно понять только ииследовав обработчик клика по кнопке. Из него всё можно понять, так что успехов.

Ранг: 310.8 (мудрец)
Статус: Участник

Создано: 12 августа 2006 11:42 · Поправил: tundra37 New!
Цитата · Личное сообщение · #12

Johnson Finger пишет:
Есть еще идеи, как выхватить эту либу из памяти?

Так может ее и нет в твоем варианте. Просто есть два механизма защиты. В упакованном варианте кнопка работает только при регистрации и остался вариант с ДЛЛ - просто автор сделал, но не понадобилось или делал для нескольких вариантов.
Самое действенное : действительно,во-первых, плясать от клика по кнопке, и ,во-вторых, смотреть, что после успешного LoadLibrary делается. Но, т.к. подкладывание ДЛЛ к нераспакованной ничего не дает, то много шансов, что все-таки библа в памяти есть - LoadLibrary и GetProcAddress - должны дать адрес.


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 12 августа 2006 13:59 New!
Цитата · Личное сообщение · #13

tundra37
Фенька помойму в том, что либа загружена искуственно, то есть система не знает о ней. Арма просто копирует в память библу из себя и фиксит импорт проги, направляя вызовы из прога куда надо в библу. Точно сказать не могу, ибо давно удалил прогу с армой этой, так что ждём инфы от Johnson Finger. Видит ли оля имя модуля ArmAccess в памяти процесса и как получает запакованная проограмма адреса апи функций из этой библы - через GetProcAddress или арма их пишет сама

Ранг: 310.8 (мудрец)
Статус: Участник

Создано: 13 августа 2006 12:24 New!
Цитата · Личное сообщение · #14

Rascal пишет:
либа загружена искуственно

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


Ранг: 260.9 (наставник)
Статус: Участник
John Smith

Создано: 14 августа 2006 02:03 · Поправил: Rascal New!
Цитата · Личное сообщение · #15

tundra37
Логично. Без примера могу только гадать и свпоминать.

Кста, если мне не изменят память арма палюбе портит импорт. Она может как раз губить импорт этой библы, а вот когда восстанавливаем импорт импрек возвращает всё на круги своя. Т.к. без библы прога упадёт в загрузчике. Так что вот так.


Ранг: 299.6 (наставник)
Статус: Участник
Armadillo Killer

Создано: 11 ноября 2006 14:48 · Поправил: Z0oMiK New!
Цитата · Личное сообщение · #16

Johnson Finger можешь еще поэксперементировать

Function Read_Arm_Var(XENV:PCHAR) : String;
Var Env_String : ARRAY[0..255] OF CHAR;
Begin
try
Env_String:='';
If (GetEnvironmentVariable(XENV,@Env_String,255)<>0)
Then Read_Arm_Var:=Trim(Env_String)
Else Read_Arm_Var:='';
except end;
End;
Function CheckCodeFn(nameFn,codeFn:String) : Boolean;
type TCheckCode = function(name,code:PChar) : Boolean; StdCall;
Var Handle : THandle;
CheckCode : TCheckCode;
Begin
try
CheckCodeFn:=False;
Handle:=LoadLibrary('ArmAccess.dll');
If (Handle<>0) Then
Begin
@CheckCode:=GetProcAddress(Handle,'CheckCode');
If (@Checkcode <> Nil) Then
CheckCodeFn:=CheckCode(PChar(NameFn),PChar(CodeFn));
FreeLibrary(Handle);
End;
except end;
End;

Далее добавим в проект новую форму (назовем ее RegDlg), разместим на ней 3 Edit’а (для ввода имени и серийника, а третий с атрибутом ReadOnly – для демонстрации аппаратного ключа) и 2 кнопки – “Ok” и “Cancel”. Теперь смело добавляй в меню своей софтины пункт “Регистрация” и обрабатывай клик на нем примерно так:

procedure TForm1.Register1Click(Sender: TObject);
begin
try
RegDlg.Edit3.Text:=Read_Arm_Var('FINGERPRINT');
except end;
try
if RegDlg.ShowModal=mrOk then
begin
if CheckCodeFn(RegDlg.Edit1.Text,RegDlg.Edit2.Text) then begin MessageBox(0,PChar('Прога зарегистрирована!'),' Регистрация',MB_OK+MB_ICONINFORMATION); Register1.Visible:=false end else MessageBox(0,PChar('Неверный серийный номер!'),' Регистрация',MB_OK+MB_ICONERROR)
end;
except end;
end;
Теперь нам бы хотелось вывести инфу о регистрации в окошко “О проге” – нет проблем:
procedure TForm1.About1Click(Sender: TObject);
var str,un:string;
begin
try
un:=Read_Arm_Var('ALTUSERNAME');
if ((un<>'')and(un<>'DEFAULT')) then str:=un else str:='UNREGISTERED';
except end;
try
str:='Шароварная суперпрога.'
+#13+''
+#13+'Зарегистрирована на имя: '+str+'. '
+#13+''
+#13+'Автор: Screw aka Viktor.'+#13+'Email: integral@mail.ru.'+#13
+'Сайт: screwaka.nm.ru. '
+#13+''
+#13+'Copyright © 2005 by Screwaka.';
MessageBox(0,PChar(str),' О проге',MB_OK+MB_ICONINFORMATION);
except end;
end;
Если ты еще не врубился как проверить, зарегена ли прога, смотри следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var un:string;
begin
try
un:=Read_Arm_Var('ALTUSERNAME');
if ((un='')or(un='DEFAULT')) then
MessageBox(0,PChar('Эта функция работает только в зарегистрированной версии программы.'), ' Зарегистрируйтесь!',MB_OK+MB_ICONERROR)
else MessageBox(0,PChar('Спасибо за регистрацию программы!'), ' Зарегистровано!',MB_OK+MB_ICONINFORMATION);
except end;
end;

Ранг: 0.6 (гость)
Статус: Участник

Создано: 1 декабря 2006 05:37 New!
Цитата · Личное сообщение · #17

Еще вопрос по subj'у топика:

Стоит ли тратить время и трейсить armaccess.CheckCode(const char *name, const char *code) в надежде сделать keygen?
Или keygen сделать надежды мало ? (если там осуществляется проверка char *code на соответствие по открытому RSA-ключу char *name)


Ранг: 353.0 (мудрец)
Статус: Участник
resreveR

Создано: 1 декабря 2006 05:56 New!
Цитата · Личное сообщение · #18

AlexShot пишет:
Стоит ли тратить время и трейсить armaccess.CheckCode(const char *name, const char *code) в надежде сделать keygen?

да, давай, некоторым это удалось ;) сразу ищи ресурсы для нахождения приват.ключа для ецдса113 =)
AlexShot пишет:
(если там осуществляется проверка char *code на соответствие по открытому RSA-ключу char *name)

гы! =)
<< . 1 . 2 .
 eXeL@B —› Крэки, обсуждения —› ArmAccess.dll

Видеокурс ВЗЛОМ