ေအာ္ အစ္ကိုက ေရးၿပီးသြားၿပီလား။
က်ေနာ္လည္း ဒီေန႔အားတာနဲ႔ ေရးလာခဲ့ပါတယ္။
နည္းနည္းေလာက္ ဖတ္ေပးေပါ့။ မွားခဲ့ရင္လည္း ခြင့္လႊတ္ပါ။
Cracker: $ƴǩǾ [http://syko92.wordpress.com]
::xxxxxx=|:::::::RCE::::::::::>
CrackMe ကို ခရက္လုပ္သြားပံု အဆင့္ဆင့္အား က်ေနာ့္ဆရာ ကို rhythm က ေရးေပးပါဆုိလို႔ ေရးေပးလိုက္ပါတယ္။ (တကယ္ဆုိ ကို rhythm က က်ေနာ္တို႔ကို ေရးေပးရမွာ။ က်ေနာ္က ခရက္သာလုပ္တတ္တာ ၊ ၿပန္မရွင္းတတ္ဘူး။ အခုေတာ့ ဆရာက ေရးခုိင္းေတာ့လည္း တပည့္ေလးက လုပ္ေပးရတာေပါ့။
)
တစ္ခုေတာ့ ၾကိဳေၿပာခ်င္ပါတယ္။ က်ေနာ္ Crack လုပ္ရင္ အၿမဲ ကေမာက္ကမပါ။ တစ္ခါမွ နည္းမွန္လမ္းမွန္ မရဖူးဘူး။ (တစ္ခါတစ္ေလဆုိ အဆင့္ေတြ ဟုိေက်ာ္ဒီေက်ာ္နဲ႔လည္း ခရက္လုိ႔ရသြားတတ္တယ္)
အဲဒါေၾကာင့္ အခုက်ေနာ္ ေရးၿပတဲ့အခါ လိုအပ္ခ်က္ေတြရိွႏိုင္ပါတယ္။ ၿပီးေတာ့ အခု က်ေနာ္ ခရက္လုပ္ရတဲ့ေကာင္က AutoIT Script နဲ႔ ေရးထားေတာ့ တစ္ခါမွမလုပ္ဖူးေတာ့ စလုပ္တုန္းကဆုိ သူ႔ Code ေတြနဲ႔တင္ ေတာ္ေတာ္တုိင္ပတ္ခဲ့ရပါေသးတယ္။ အခုလည္း ၿပန္ေရးၿပလိုက္ပါဆုိလို႔သာ ၿပန္ေရးၿပရတာ။ ေရးေနရင္းနဲ႔ Coding ကို ၿပန္ၾကည့္ၿပီး ကိုယ့္ဟာကိုယ္ မူးသြားတာ ဘယ္ႏွခါရိွမွန္းမသိဘူး။
လုိအပ္တာေတြရိွရင္လည္း ေၿပာပါခင္ဗ်ာ။ က်ေနာ္ကေတာ့ keygen ကို (--က်ေနာ္ မၾကိဳက္ေပမယ့္လည္း ခုထိ သံုးေနရတဲ့--)VB.NET နဲ႔ဘဲေရးထားတာပါ။
ၿပီးေတာ့ အၿခားသူမ်ား ေလ့လာလို႔ရေအာင္လည္း keygen အတြက္ AutoIT နဲ႔ ၿပန္ေရးထားတဲ့ Code ကို ပါထည့္ေပးလိုက္ပါတယ္။ အဲဒီ့ Code ကို ေရးသားသူကေတာ့ deurus ဆုိတဲ့သူၿဖစ္ပါတယ္။
က်ေနာ္ အခု CrackMe ကို Crack လုပ္တုန္းက သူ႔ရဲ႕ အကူအညီေတြ အမ်ားၾကီးပါပါတယ္။ AutoIt နဲ႔ ေရးထားတဲ့ ဟာေတြကို သူရွင္းၿပေပးတာပါ။
သူရွင္းတုန္းကေတာ့ နားလည္တယ္။ ခုေတာ့ ရေတာ့ဘူး။
***ထပ္ေၿပာမယ္ေနာ္။ က်ေနာ္ရွင္းတာမွာ လိုအပ္တာေတြ မွားေနတာေတြရွိရင္ ခြင့္လြႊတ္ပါ။ ဘီဂင္နာေလးမို႔ ခြင့္လြႊတ္ေပးပါ။ လိုအပ္တာရိွရင္ ၿဖည့္သြားလိုက္ပါ။***
အခု Program ကို စၿပီးေတာ့ Crack လုပ္ပါမယ္။
လုိအပ္တဲ့ Tools ေတြကေတာ့ : myExe2Aut နဲ႔ AutoIt3 Decompiler [http://www.nerdbucket.com/mirrors/myAutToExe2_2_AutoIt3_Decompiler_opensource.zip] တုိ႔ၿဖစ္ပါတယ္။
--------------------------------------
Program ကို PEiD နဲ႔ ဖြင့္ၾကည့္တဲ့အခါ UPX နဲ႔ Pack လုပ္ထားတာေတြ႔ရပါမယ္။ UNPACK လုပ္လိုက္ပါ။ (Unpack လုပ္နည္းကို ကို rhythm ေရးထားတဲ့ Cracker Guide 2.0 မွာ ဖတ္ႏႈိင္ပါတယ္။)
AutoIT နဲ႔ ေရးထားတယ္ဆုိတာကိုေတာ့ အေပၚမွာ က်ေနာ္ေဖာ္ၿပၿပီးပါၿပီ။
အဲဒီ့အတြက္ က်ေနာ္တုိ႔အေနနဲ႔ AutoIT script ေတြကို အနည္းငယ္ ေလ့လာဖို႔လိုပါတယ္။ (က်ေနာ့္တုန္းကလည္း နည္းနည္းေတာ့ ဖတ္လုိက္ရတယ္။ အခုေတာ့ ေမ့ေတ့ေတ့
)
အဲဒီ့အတြက္ သူ႔အေၾကာင္းက်ေနာ္တို႔ google မွာ ရွာၿပီးေတာ့ အနည္းငယ္ေတာ့ ေလ့လာရပါမယ္။
ေနာက္တစ္ခုအေနနဲ႔ လိုအပ္တဲ့ Tool တစ္ခုၿဖစ္တဲ့ myExe2Aut ဆုိတဲ့ Tool ကိုရွာလိုက္ပါ။
အဲဒါေတြရွာၿပီးၿပီ ၊ ကိုယ္တုိင္လည္း AutoIT Language နဲ႔ အနည္းငယ္ ရင္းႏွီးၿပီဆုိရင္ေတာ့ က်ေနာ္တုိ႔ စတင္ၿပီး ခရက္လုပ္ပါေတာ့မယ္။
--------------------------------------
ေအာက္မွာကေတာ့ serial ကို စစ္ေပးတဲ့ Function ၿဖစ္ပါတယ္။ အဲဒါမ်ိဳးကို ေတြ႔ေအာင္ရွာပါ။
ေတြ႔ရင္ေတာ့ ေအာက္မွာ က်ေနာ္ေၿပာတဲ့အတုိင္း ေလ့လာရင္ေလ့လာပါ။ မဟုတ္ရင္လည္း ကိုယ့္ဟာကိုယ္ၾကည့္ရင္ေတာင္ Programming အေၿခခံရိွတာနဲ႔တင္ နားလည္မွာပါ။
က်ေနာ္ကေတာ့ အေသးစိတ္မရွင္းၿပထားေတာ့ဘူးေနာ္။
--------------------------------------
Func CHECKKEY($USER, $PASS)
Local $OPKEY = "", $SIG = ""
Local $USER_LEN = StringLen($USER)
Local $PASS_LEN = StringLen($PASS)
If $USER_LEN < $PASS_LEN Then <= UserName က Password ထက္ နည္းေနရင္ Error တက္ပါမယ္။
MsgBox(0, "ERROR", "Invalid username or key.")
Exit
ElseIf $USER_LEN < 4 Then <= UserName ေနရာမွာ char ၄ လုံးမရိွရင္ Error တက္ပါမယ္။
MsgBox(0, "ERROR", "Invalid username or key.")
Exit
EndIf
$PASS_INT = Int($USER_LEN / $PASS_LEN)
$PASS_MOD = Mod($USER_LEN, $PASS_LEN)
$OPKEY = _STRINGREPEAT($PASS, $PASS_INT) & StringLeft($PASS, $PASS_MOD)
For $INDEX = 1 To $USER_LEN
$SIG &= Chr(BitXOR(Asc(StringMid($USER, $INDEX, 1)), Asc(StringMid($OPKEY, $USER_LEN - $INDEX + 1, 1)))) <- ဒါနဲ႔ ပတ္သက္ၿပီးေတာ့ ေအာက္မွာ ရွင္းထားပါတယ္။
Next
If $SIG = _STRINGREPEAT(Chr(32), $USER_LEN) Then
MsgBox(0, "INFO", "Your key was registered.")
Exit
Else
MsgBox(0, "INFO", "Your key is invalid.")
EndIf
EndFunc
ေအာက္ကေတာ့ Program တစ္ခုလုံးရဲ႕ အေရးၾကီးဆုံးလိုင္းပါ
$SIG &= Chr(BitXOR(Asc(StringMid($USER, $INDEX, 1)), Asc(StringMid($OPKEY, $USER_LEN - $INDEX + 1, 1))))
-------------------------
Program ရဲ႕ routine ကို ေသခ်ာ ေလ့လာၾကည့္ရေအာင္။
တစ္ပိုင္းစီခြဲၿပီးေတာ့ ေလ့လာၾကည့္ပါမယ္။
-------------------------
ဥပမာ -user name: $ƴǩǾ
-pass: okys
$PASS_INT ကို တြက္ၾကည့္ပါမယ္။
UserName ရဲ႕ Length က ၄ ၊ Password ရဲ႕ Length က လည္း ၄ ဆုိေတာ့ စားလုိက္ေတာ့ စားလဒ္=၁ ရပါတယ္။
$PASS_INT = Int($USER_LEN / $PASS_LEN) = 4/4 = 1
$PASS_MOD ကို တြက္ပါမယ္။
UserName ရဲ႕ Length က ၄ ၊ Pass ရဲ႕ Length က လည္း ၄ ဆုိေတာ့ အၾကြင္းရွာေတာ့ 0 ရပါတယ္။
$PASS_MOD = Mod($USER_LEN, $PASS_LEN) = 4 mod 4 = 0
$OPKEY အလွည့္ပါ။
$OPKEY = _STRINGREPEAT($PASS, $PASS_INT) & StringLeft($PASS, $PASS_MOD) = okys & "" = okys
တြက္စရာရိွတာ တြက္ၿပီးၿပီဆုိေတာ့ ေနာက္ဆုံးၿဖစ္တဲ့
အေပၚက $SIG &= Chr(BitXOR(Asc(StringMid($USER, $INDEX, 1)), Asc(StringMid($OPKEY, $USER_LEN - $INDEX + 1, 1)))) ဆီကိုၿပန္သြားပါမယ္။
ရွင္းေနရင္ ပိုရႈပ္ကုန္မွာစိုးလို႔ ရွင္းေတာ့ဘူးေနာ္။ ကိုယ့္ဟာကိုယ္ၾကည့္လိုက္ေတာ့။ (အစကေတာ့ ေရးၾကည့္ေသးတယ္။ ကုိယ့္ဟာကိုယ္ၿပန္ဖတ္တာေတာင္ နည္းနည္း မူးလာလုိ႔ ၿပန္ဖ်က္လိုက္တာ။ ကိုယ့္ဟာကိုယ္ ေလ့လာၾကည့္လိုက္ေတာ့။ အဲဒီ့လိုင္းကို လြယ္တာေတာ့ လြယ္တယ္။)
ေနာက္ဆုံးရလာမယ့္အေၿဖကိုေတာ့ တြက္ၿပမယ္
ွ83 XOR 32 = 115 = s
89 XOR 32 = 121 = y
75 XOR 32 = 107 = k
79 XOR 32 = 111 = o
user: $ƴǩǾ
pass: okys
ကဲ ဒါဆုိ အေၿဖရသြားၿပီေပါ့ေနာ္။ အေၿဖဘာလဲ ဆုိတာကို Program Routine ကိုၾကည့္ၿပီးေတာ့ ကိုယ္တိုင္တြက္သြားတဲ့နည္းပါ။
အခု Keygen စေရးမယ္ေနာ္။
နားလည္လားမလည္လားေတာ့ သိဘူး။ က်ေနာ့္ဟာက်ေနာ္ေတာ့ နားလည္တယ္။ ၿပန္သာမရွင္းတတ္လုိ႔။ ကဲ အခု က်ေနာ္ေရးထားတဲ့ keygen ကို ၿပပါမယ္။
Keygen ရဲ႕ Code ေတြကိုေတာ့ ရွင္းၿပဖို႔မလိုဘူးထင္ပါတယ္။ ရိုးရိုးရွင္းရွင္းနဲ႔ ေရးထားတဲ့ ဘီဂင္နာ Code ေလးေတြပါ။ ၾကည့္တာနဲ႔တင္ နားလည္ၾကမွာပါ။
Public Class CrackME2
Dim user, pass As String
Private Sub CrackMe2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox("This is a Keygen...", MsgBoxStyle.Information, "MYANMAR ᴚᴲVᴲЯ₴!Иᵷ SCHOOL")
End Sub
'''''Register Button ပိုင္းကို မူရင္း Code နီးပါးရေအာင္လို႔ ၿပန္ေရးထားတာပါ။''''''
Public Sub btnreg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnreg.Click
checkpass(txtuser.Text, txtpass.Text)
End Sub
Public Function checkpass(ByVal user As String, ByVal pass As String) As String
Dim KEY As String
Dim SIG As Integer
user = txtuser.Text
pass = txtpass.Text
If user.Length < pass.Length Then
MsgBox("Invalid username or key.", MsgBoxStyle.Critical, "ERROR")
Exit Function
ElseIf user.Length < 4 Then
MsgBox("Invalid username or key.", MsgBoxStyle.Critical, "ERROR")
Exit Function
End If
For i As Integer = 1 To user.Length
SIG = Asc(Mid(txtuser.Text, i, 1))
SIG = SIG Xor 32
KEY = Chr(SIG) & KEY
Next
If txtpass.Text = KEY Then
MsgBox("Thanks!! Your Key is now Registered.", , "Registered.")
Me.Close()
Else
MsgBox("Invalid UserName And Password. Try Again.", , "Invalid")
End If
Return SIG
End Function
''''''''''Keygen ထုတ္တဲ့ အပုိင္းေရာက္ပါၿပီ'''''''''''''
Private Sub btngenerate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnrule.Click
Dim yna As String
Dim key As Integer
If Len(txtuser.Text) < 4 Then
txtpass.Text = "min 4 chars"
Else
For i As Integer = 1 To Len(txtuser.Text)
yna = Asc(Mid(txtuser.Text, i, 1))
yna = yna Xor 32
KEY = Chr(SIG) & KEY
Next
txtpass.Text = KEY
End If
End Sub
End Class
အဆင္ေၿပၾကပါေစဗ်ာ။
ေအာက္ကေတာ့ keygen ကို AutoIt နဲ႔ ဘဲ ၿပန္ေရးထားတဲ့ဟာပါ။ (ေရးသားသူကေတာ့ deurus ၿဖစ္ပါတယ္။ သူူေရးထားတဲ့ VB.NET keygen ေတာင္ရိွေသးတယ္။ ကုဒ္က ဘာမွမကြာလို႔ တင္ေပးေတာ့ဘူးေနာ္)
$MAIN = GUICreate("keygen by deurus", 300, 80, -1, -1, 382205952, 385)
$NAME_LBL = GUICtrlCreateLabel("Username", 5, 5, 60, 20, BitOR(4096, 1))
$NAME_INP = GUICtrlCreateInput("", 70, 5, 225, 20, 1)
$PASS_LBL = GUICtrlCreateLabel("Key", 5, 30, 60, 20, BitOR(4096, 1))
$PASS_INP = GUICtrlCreateInput("", 70, 30, 225, 20, 1)
$REGISTER = GUICtrlCreateButton("Register", 5, 55, 60, 20)
$GIVE_UP = GUICtrlCreateButton("Generate", 70, 55, 60, 20) <- Give Up ဆုိတဲ့ Button ေနရာမွာ Generate button ကို အစားထုိးထားပါတယ္။
$TASK = GUICtrlCreateButton("?", 140, 55, 20, 20)
$AUTHOR = GUICtrlCreateLabel("keygen by deurus", 165, 55, 130, 20, BitOR(4096, 1))
GUISetState(@SW_SHOW, $MAIN)
While True
$MSG = GUIGetMsg()
Switch $MSG
Case $REGISTER
Call("CHECKKEY", GUICtrlRead($NAME_INP), GUICtrlRead($PASS_INP))
Case $GIVE_UP
Call("GETKEY", GUICtrlRead($NAME_INP), GUICtrlRead($PASS_INP)) <- getkey function ကို Give_UP ဆုိတဲ့ button ထဲမွာ ထည့္လိုက္ပါတယ္။
Case $TASK
MsgBox(0, "Info", "keygen by deurus")
Case - 3
Exit
EndSwitch
Sleep(15)
WEnd
Func GETKEY($USER, $PASS) <- ဒါကေတာ့ keygen function ၿဖစ္တဲ့ GETKEY ပါ။
Local $OPKEY = "", $SIG = ""
Local $USER_LEN = StringLen($USER)
Local $PASS_LEN = StringLen($USER)
If $USER_LEN < 4 Then
GUICtrlSetData($PASS_INP ,"min 4 chars");
Else
For $INDEX = 1 To $USER_LEN
$SIG = Chr(BitXOR(Asc(StringMid($USER, $INDEX, 1)), 32)) & $SIG
Next
GUICtrlSetData($PASS_INP ,$SIG);
EndIf
EndFunc
Func CHECKKEY($USER, $PASS) <- ဒါကေတာ့ Original Code ပါ
Local $OPKEY = "", $SIG = ""
Local $USER_LEN = StringLen($USER)
Local $PASS_LEN = StringLen($PASS)
If $USER_LEN < $PASS_LEN Then
MsgBox(0, "ERROR", "Invalid username or key.")
ElseIf $USER_LEN < 4 Then
MsgBox(0, "ERROR", "Invalid username or key.")
Exit
EndIf
$PASS_INT = Int($USER_LEN / $PASS_LEN)
$PASS_MOD = Mod($USER_LEN, $PASS_LEN)
$OPKEY = _STRINGREPEAT($PASS, $PASS_INT) & StringLeft($PASS, $PASS_MOD)
For $INDEX = 1 To $USER_LEN
$SIG &= Chr(BitXOR(Asc(StringMid($USER, $INDEX, 1)), Asc(StringMid($OPKEY, $USER_LEN - $INDEX + 1, 1))))
Next
If $SIG = _STRINGREPEAT(Chr(32), $USER_LEN) Then
MsgBox(0, "INFO", "Your key was registered.")
Else
MsgBox(0, "INFO", "Your key is invalid.")
EndIf
EndFunc
ဒီေလာက္ဆုိ ေလ့လာလို႔ရမယ္ထင္ပါတယ္။
ကို rhythm လည္း က်ေနာ္လိုတာရိွရင္ ၿဖည့္ေပးပါဦးေနာ္။ အားကုိးပါတယ္။ အစ္ကိုသာ က်ေနာ့္ကို အနီးကပ္သင္ေပးႏုိင္ရင္ ေကာင္းမယ္။
အခုေတာ့ ဟိုပုန္းဒီပုန္းနဲ႔ ဘယ္လိုက္ရမွန္းသိဘူး။
ကိုယ့္ဟာကုိယ္ေလ့လာတာ ထင္သေလာက္ ခရီးမေရာက္ေသးဘူး။ ေနာက္တစ္ခါ ရန္ကုန္ၿပန္ေရာက္ရင္ အေၾကာင္းၾကားလိုက္ေနာ္။ အိမ္လာၿပီး သင္မယ္။ ဒီတစ္ခါ တစ္ေနကုန္ေနမွာ။
ps# deurus ၏ AutoIt ႏွင့္ေရးထားေသာ keygen code ေတြကေန ၿပီးေတာ့မွ ၿပန္လည္ရွင္းၿပေပးထားတာပါ။ Crack တုန္းကေတာ့ crack လို႔ရၿပီး မရွင္းၿပတတ္လို႔ ကိုးကားရွင္းၿပထားပါတယ္။ နားမလည္တာရိွရင္ swanhtet1992[at]gmail[dot]com မွာေမးၿမန္းႏုိင္ပါတယ္။ အတတ္ႏုိင္ဆုံး ၿပန္ေၿဖေပးပါ့မယ္။
ေလာေလာဆယ္ေတာ့ ႏုိ၀င္ဘာ တစ္လ Online နားထားပါတယ္။ (က်န္းမာေရးေၾကာင့္ရယ္ ၊ စာဖတ္ခ်င္လုိ႔ရယ္ ၊ Software Protection ဆုိတာကို အေလးမထားတဲ့ Myanmar Game Studio တစ္ခုက ထြက္သမွ် Game ေတြကို crack လုပ္ဖို႔အတြက္ရယ္ေၾကာင့္ပါ။
)
အားလုံး ကိုယ္စိတ္ႏွစ္ၿဖာ က်န္းမာရႊင္လန္းၾကပါေစ
$ƴǩǾ