Wednesday, May 25, 2011

Tutorial VB : Membongkar Password Myob Accounting

Sebelum masuk ke source code program, silahkan Anda coba baca penjelasan saya berikut ini:
// Enskripsi Password:
Panjang password pada myOB adalah 11 Digit Asumsikan kita mempunyai password 12345678901 lihat ilustrasi berikut ini:
Char Hexa myOBHexa 
---------------------
1 31 BE
2 32 C8
3 33 D0
4 34 C9
5 35 C2
6 36 CC
7 37 D4
8 38 CD
9 39 C6
0 48 C6
1 30 CE
Anda pasti bingung bagaimana cara mendapatkan myOBHexanya, tidak usah bingung itu sih gampang, coba buka file myOB yang berektensi .DAT dengan menggunakan editor HEXA seperti UltraEdit, HexView atau yg lainnya. kemudian sebelum pada bagian akhir file kalian akan menemukan nilai:
--> BE C8 D0 C9 C2 CC D4 CD...
Kalo tidak ada, itu tandanya file myOBnya tidak berpassword atau passwordnya bukan 12345678901. untuk mencobanya buat file myOB dengan password 12345678901
Nah coba liat untuk karakter pertama, hmm..m...mm..kalo diamati nilai hexa dari 1 kan 31 nah sekarang kok jadi BE. kalo dikurangi antara BEh-31h maka hasilnya kan 8Dh. lalu kalo semua hexa password dikurangi semua berdasarkan urutannya maka kita akan mendapatkan:
--> 8D 96 9D 95 8D 96 9D 95 8D 96 9D
Setelah kita mendapatkan nilainya, kita bisa kita coba jadikan kunci untuk membuka password yang lain.
Kalo diamati secara mendalam karakter kan dimulai dari 0 s/d 255. selain itu kan nggak ada. gak mungkin ada karakter dengan nilai ascii minus(-) atau lebih dari 256. Kalo kita kurangi semua, ini bisa error. Jadi saya berpendapat bahwa kalo nilai password pada file lebih besar dari Nilai kunci maka dikurangi, kalo sebaliknya ditambah.
Setelah dapat caranya kita buat programnya, kurang lebih seperti ini:
Option Explicit

Private Sub Form_Load()
Dim pwd As String
pwd = GetMyOBPWD("E:\vbBego\myob\test.dat")
If pwd <> "" Then
MsgBox "Password: " & pwd, 64, "vbBego"
Else
MsgBox "Tidak ber Password", 16, "vbBego"
End If
End Sub

Function GetMyOBPWD(hFile As String) As String
Dim Head
Dim I As Integer
Dim PosKey As String
Dim inFile As Long
Dim nLoop As Long
Dim isiDok As String * 1000
Dim Pos1 As Long
Dim posChar As String
Dim resPwd As String
Dim tmpPWD As String

Head = Split("8D 96 9D 95 8D 96 9D 95 8D 96 9D", " ")
PosKey = Chr(&H0) & Chr(&H1C) & Chr(&H0) & Chr(&H1) & _
String(9, Chr(0)) & Chr(1) & Chr(0)
inFile = FileLen(hFile)
Open hFile For Binary Access Read As #1
For nLoop = 1 To inFile Step 1024
Get #1, nLoop, isiDok
DoEvents
Pos1 = InStr(1, isiDok, PosKey, vbBinaryCompare)
If Pos1 Then
Dim H As String * 11
Get #1, nLoop + Pos1 + 68, H
For I = 1 To Len(H)
posChar = Mid(H, I, 1)
If Asc(posChar) > 0 Then
If Asc(posChar) > "&H" & Head(I - 1) Then
resPwd = resPwd & Chr(Asc(posChar) - Val( _
"&H" & Head(I - 1)))
Else
resPwd = resPwd & Chr(Asc(posChar) + (255 - Val( _
"&H" & Head(I - 1))))
End If
End If
Next I
tmpPWD = resPwd
resPwd = ""
End If
isiDok = ""
Next nLoop
Close #1
GetMyOBPWD = tmpPWD
End Function
Saya mencobanya dengan menggunakan MYOB Accounting Plus v10.5 untuk versi lain saya belum sempat mencoba, ya mudah-mudahan konsepnya sama. Kalo dari kalian punya yg lebih sederhana, bisa bagi-bagi/dishare dab sekalian mencoba dengan versi yang lain.
Selamat mencoba.

Post a Comment