Полный ПИ 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 полно, и, чтобы их анализировать, обязательно нужен декомпилятор или знания, которые, я думаю, ты получил, прочитав данную статью. Удачи тебе! |