Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #90, ИЮНЬ 2006 г.

Полный ПИ

GPcH (admin@vb-decompiler.org)

Хакер, номер #090, стр. 090-082-6


Ломаем запрос пароля

Хорошим примером на эту тему будет крэкми "AC_Crackme_02_A.exe". В нем нужно ввести верный серийник. Если серийник неверный, то выводится "fuxxor". Давай посмотрим его в декомпиляторе:

loc_401D4C: FLdRfVar var_94

loc_401D4F: FLdPrThis

loc_401D50: VCallAd Crackme.Frame1

loc_401D53: FStAdFunc var_90

loc_401D56: FLdPr var_90

loc_401D59: from_stack_1 = TextBox.Text

loc_401D5E: FLdZeroAd var_94

loc_401D61: FStStr var_8C

loc_401D64: FFree1Ad var_90

loc_401D67: LitStr "ExDec_Roxx"

loc_401D6A: FStStrCopy var_88

loc_401D6D: ILdRf var_88

loc_401D70: ILdRf var_8C

loc_401D73: EqStr

loc_401D75: BranchF loc_401DA4

loc_401D78: LitVar_Missing var_114

loc_401D7B: LitVar_Missing var_F4

loc_401D7E: LitVar_Missing var_D4

loc_401D81: LitI4 0

loc_401D86: LitVarStr var_A4, "yess"

loc_401D8B: FStVarCopyObj var_B4

loc_401D8E: FLdRfVar var_B4

loc_401D91: ImpAdCallFPR4 MsgBox(, , , , )

loc_401D96: FFreeVar var_B4 = "": var_D4 = "": var_F4 = ""

loc_401DA1: Branch loc_401DCD

loc_401DA4: ' Referenced from: 401D75

loc_401DA4: LitVar_Missing var_114

loc_401DA7: LitVar_Missing var_F4

loc_401DAA: LitVar_Missing var_D4

loc_401DAD: LitI4 0

loc_401DB2: LitVarStr var_A4, "fuxxor"

loc_401DB7: FStVarCopyObj var_B4

loc_401DBA: FLdRfVar var_B4

loc_401DBD: ImpAdCallFPR4 MsgBox(, , , , )

loc_401DC2: FFreeVar var_B4 = "": var_D4 = "": var_F4 = ""

loc_401DCD: ' Referenced from: 401DA1

loc_401DCD: ExitProcHresult

loc_401DCE: ImpAdLdFPR4

Просмотрев внимательно код, видим сравнение в самом начале:

loc_401D67: LitStr "ExDec_Roxx"

loc_401D6A: FStStrCopy var_88

loc_401D6D: ILdRf var_88

loc_401D70: ILdRf var_8C

loc_401D73: EqStr

loc_401D75: BranchF loc_401DA4

Понимать этот код следует примерно так:

var_88="ExDec_Roxx"

if (var_88=var_8C) then

видим мессагу, которая говорит о том, что пасс верный. Пасс-то мы узнали, только крэкнуть бы его, чтобы любой неверный пароль подходил. BranchF по адресу 401D75 джампается на вывод инфы о неверном пароле, следовательно, он понимается как jne, то есть, если EqStr возвращает нам разные строки, то джампаемся. Вывод - инвертировать инструкцию. Следует понимать, что в VB всего три типа переходов, два из которых условные - 1C и 1D. То есть для инвертирования нам надо 1C заменить на 1D, или наоборот. Меняем - мессаги больше нет.

Заключение

Вот мы и научились с тобой находить пикод в EXE-файле, декомпилировать его в уме и в декомпиляторе, познакомились с основными опкодами P-Code и теперь можем анализировать что угодно: будь то вирус с целью написания для него антивируса, будь то прога, которая не регается без ключа или без повышения своего скилла. И не верь тем, кто говорит, что пикода нигде уже нет. Я видел проги с гвардантом и хаспом в пикоде - там немало огромных проектов, скомпилированных в пикод. А уж троев и червей на VB полно, и, чтобы их анализировать, обязательно нужен декомпилятор или знания, которые, я думаю, ты получил, прочитав данную статью. Удачи тебе!

Назад на стр. 090-082-5  Содержание  Вперед на стр. 090-082-7