- = VB 5/6 og SmartCheck The beginning... = -

Jeg skal da prøve lage ett lite SmartCheck essay, du vet sånn kose literatur. Det er ikke alltid så lett hvis du for eksempel ikke programerer i vb eller har drevet spesielt mye med cracking å skjønne hva som foregår.

Det er meningen att etter att du har lest dette så skal du kunne sette opp smartcheck for debugging.

Version av dette dokumentet: 1.0
Jeg vil legge til forklaringer etterhvert som det måtte gå opp ett lys for meg. Med andre ord ikke så veldig ofte, men det skjer.
Spørsmål og/eller positive komentarer kan du bare maile meg eller ta kontakt på irc/efnet.

Hva er SmartCheck:
SmartCheck er ett verktøy som programutviklere bruker for å debugge vb og c programmer. Nå kan jeg ikke si att jeg har skjønt så mye av c programmene som jeg har prøvd i SmartCheck ville nokk brukt SoftIce der isteden, men vb programmene er forholdshvis enkle.
Selv om det her er en 'generic' tutorial på oppsett og noe av det du ser når du debugger i SmartCheck så kan du hvis du absolutt vil laste ned ett av programmet jeg har brukt som target, < Snak3's Crackme 2 >.
Numega's hjemmeside er http://www.numega.com
Hvordan konfigurere SmartCheck for debugging:

Når du har innstallert smartcheck så er det ikke bare bare og sette i gang med debuggingen, det er en del innstillinger som må settes for att du skal få mulighet til å se det som skjer. Jeg vet ikke hvem som har brukt for de settingene som er default, men det er nå såh.. det driter vi i og da.. kule som vi er..

Du kan klikke på File og Open eller bruke CTRL+O til å få frem fil browseren, browse deg frem til 'target', klikke på den og du spretter tilbake til SmartCheck.
Nå er pila blitt grønn.. du kan nå starte debuggingen, dvs. programmet, med å klikke på den pila eller bruke F5 tasten, men først sjekk settings...

Her ser du hvordan du får frem Settings menyen. Den kan du IKKE klikke på når programmet du debugger kjøres. Hvis du har mistanker om att du har konfigurert feil kan du bare stoppe debuggingen og sjekke settings før du setter i gang igjen.

Error Detection: Bare pass på att alt er merka av typer errors den skal sjekke.

Reporting: Her kan du egentelig bare merke av alt.. det er ikke alltid du behøver å ha alt på, f.eks. MouseMove events og sånt, men det er kjekt att du ser absolutt alt som skjer.

Files to Check: Vi behøver som regel ikke bry oss om den her, men det er alltids interesant å se hvilke .dll filer programmet bruker. Hvis f.eks. fila supersharewareprotection.dll er i lista, kan du regne med att den bruker en form for tredjeparts protection.

Error Supression: Det her er veldig viktig.. du MÅ fjerne avmerkingen sånn att det blir seende ut som det her nedover det hele.. for hvis du lar default stå merket her så vil du ikke se det som skjer.. rett og slett.. så være innom den her hver gang før du starter debuggingen.

NB!

Program Info: Den driter vi i ettersom den ikke har noen kul funksjon som vi har brukt for.

Advanced Settings: Denne får du frem når du klikker på Advanced knappen på Error Detection arkfanen.

Du KAN jo bruke samma settingene som jeg har satt her, men jeg kan jo kanskje nevne att de to øverste skal helst være avmerket.
Event Rollups har ikke så veldig mye og si tror jeg, jeg har prøvd med og uten på den crackme tingen her.
Vi prøver å ikke bry oss altfor mye med Guard Bytes of Fill character.
De tre nederste skal helst IKKE være avmerket da du ikke vil kunne se API call's etc..

Ja.. det var det, det er ikke så mye og passe på, bare sette Advanced Setting's en gang, så huske og ta på alle options på Reporting og av alt på Error Supression hver gang du starter ett nytt 'target'.
Mini tutorial på Snak3's Crackme 2
En liten tutorial på en liten crackme... crackme's fins det millioner av på nettet, det er forholdshvis helt uskadelig å trene på sånne selv om det kan bli litt kjedelig i lengden. Mange sier att det er 'bortkasta' og ta crackme's.. vel.. jeg har nå alltid trodd att hver gang du lærer noe som helst så har det ikke vært helt bortkasta.. det er bedre å ta en crackme og lære noe enn å ta en app og ikke lære en dritt...
Let's rock! :)

Sånn ser Snak3's crackme ut.. Som du ser, veldig enkelt, navn/serial kombinasjon er det vi er ute etter.
(ifølge norsk lov om reklame (reklamelovgivning) så ber vi alle se bort fra logoen da den i store mengder kan være helseskadelig.)

Vi skriver inn navn og serial, jeg bruker Trevil og 112299 og klikker på Check... Det kommer opp en messagebox som sier "Wrong Name/Serial Entered" med tittelen "Hmms...".

Såh.. hvis vi klikker ok og kikker litt i smartcheck så skal du se noe som ser omtrent sånn ut:



Det med mørke røde kryss foran er ikke av noen interesse for oss. Det som står med sånn gult 'lyn' tegn foran er intereant for oss, sånne kommer når brukeren gjør noe med programmet, f.eks. som her klikker på en knapp. I dette tilfellet så ser vi att det står ett gult tegn som det står _Click ved siden av med ett pluss tegn foran.
Klikk på den + tingen og du skal se noe som ser sånn ut:

Det du ser her er det som skjedde når jeg klikka på Check knappen på programmet, alt som programmet utførte ligger her i mellom den øverste og nederste _Click.

For å være helt sikre på att vi er på rett sted så klikker vi på MsgBox return Integer:1 linja.. da ser vi noe som ser sånn ut:



Da ser vi att vi er på rett sted, for det der er jo meldinga vi fikk.. greit å vite.. Sånn rent teknisk sett så MÅ det rette serialet være kalkulert lengre opp. (men du kan fortsatt finne det lengre nedover hvis det er brukt en del variabler.)

Såh.. vi begynner med forklaringer, det er viktig att du leser det her så du skjønner hva vi driver med, vi klikker på den grønne linja rett etter _Click, og så klikker vi på den knappen i midten på verktøylinja som er gul og har tooltiptexten "Show All Events''. Det er NÅ du skal få panikk! ...det er helt normalt, nå ser du virkelig hva som skjer. Og her er forklaringene på litt av det du ser fra og med den linja du ser på nå (den _Click tingen) og til MsgBox'en.



Len returns LONG:6
- String string1 = 0013AC94
  = "Trevil"
1. Programmet sjekker lengden på navnet mitt her, returnerer 6 som er antall char's i Trevil. Siden du ser to så kan du regne med att første gangen bare er en test av lengden.
Len returns LONG:6
- String string1 = 0013AC94
  = "Trevil"
2. Her sjekker enda en gang programmet lengden av nicket mitt, denne gangen for å sette opp en liten loop (les. for/next) som vil kalkulere ett serial ettersom den tar bokstav for bokstav og regner litt.
Mid
- string(variant)
  struct IDisplatch{}* .pdispVal = 0180EBC
- Long length = 1 0x00000001
- start(variant)
  Integer .iVal = 1 0x0001
3. Her kjøres det en funksjon som heter Mid. Den brukes når programmet vil plukke ett og ett eller flere bokstaver ut av en string. Til noen sier noe anna så kan du f.eks. se for deg att struct er Trevil og att lengden den skal lese er 1 og den skal starte lese på 1, resultatet blir da T. Hvis/når start verdien blir .iVal = 2 så blir resultatet r. etc.
Asc returns Integer:84
- String string = 0013B5A4
  = "T"
4. Det her er interesant, nesten alle vb programmer bruker denne funksjonen i serial rutinene. Det er egentelig bare for å få ett tall å jobbe med, så den gjør om T til 84, 84 er Ascii verdien for bokstaven T.

Ok, now we are getting somewhere, this is the last picture.. or so I hope..



__vbaVarMove returns DWORD:12F634
- pSource(variant)
  signet short .iVal = 84 0x0054
- pDest(variant)
  unsigned short .vt = 0 0x0000
0. Vi flytter litt variabler. Sånn VarMove vil du se en del av når verdier bytter plass og blir lagt i forskjellige variabler.
SysFreeString
- unsigned short * bstr = 0013B54A4
  = "T"
1. Vi kaster T, vi trenger ikke den lengre, vi vil bruke 84 isteden fra nå av.
__vbaVarMul returns DWORD:12F60C
- lhs(variant)
  signed short .iVal = 84 0x0054
- rhs(variant)
  signed short iVal = 7 0x0007
2. Her blir 84 * 7. Resultatet er 588.
__vbaVarMul returns DWORD:12F5FC
- lhs(variant)
  signed short .iVal = 588 0x024C
- rhs(variant)
  signed short iVal = 4 0x0004
3. Her kjenner vi igjen resultatet over som var 588, her blir det igjen ganget med 4 som er 2352.
__vbaVarMul returns DWORD:12F5EC
- lhs(variant)
  signed short .iVal = 2352 0x0930
- rhs(variant)
  signed short iVal = 22 0x0016
4. For å være på den sikre siden så har han farken deise meg ganga resultatet over med 22, så det blir 2352 * 22, svaret her er 51744.
__vbaVarSub returns DWORD:12F5DC
- unsigned long pVar = 122604 0x0012F5EC
- unsigned long lpSrc = 1242492 0x0012F57C
- unsigned long argc = 9216 0x00002400
5. Her har vi en substraksjon, på norsk minus sak, jeg har ikke helt skjønt hva som skjer her, men vi kan av resultatet under se att den har tatt 51744 og trekt fra 291 og det har resultert i 51453.
__vbaVarAdd returns DWORD:12F5CC
- lhs(variant)
  signed long .lVal = 51453 0x0000C8FD
- rhs(variant)
  signed short .iVal = 456 0x01C8
6. Den her er grei, Add betyr legge til og det er det den gjør, legger 456 til 51453, resultatet bør være 51909 (se på linja under.)
__vbaVarAdd returns DWORD:12F5BC
- lhs(variant)
  signed short .lVal = 0 0x0000
- rhs(variant)
  signed long .lVal = 51909 0x0000CAC5
7. Her har vi en Add til. Den tar 0 og legger til resultatet av utregningene til T som var 84, som igjen ble blablabla etc.. ikke sant?
__vbaVarMove returns DWORD:12F624
- pSource(variant)
  signed long .lVal = 51909 0x0000CAC5
- pDest(variant)
  unsigned short .vt = 0x0000
8. Så flytter den resultatet av utregningene så langt til en midlertidlig lagringsplass. Neste gang så blir det resultatet av Add funksjonen over som blir lagret, men da er det lakt sammen av resultatet for T og r osv...
__vbaVarForNext returns DWORD:1
- counter(variant)
  signed long .lVal = 1 0x00000001
- void * data1 = 0012F550
- void * data2 = 0012F540
9. Den er ferdig med T og vil gå videre, hvis return verdien her er DWORD:0 vil den hoppe ut av loopen og ikke fortsette, det skjer når den har tatt siste bokstaven, eks. l i dette tilfellet.
__vbaObjSet returns LPVOID:1880EBC
- struct IDispatch{} ** pObject = 0012F61C
  struct IDispatch {} ' = NULL
- struct IDispatch{} ' pDispatch = 01880EBC
  struct IDispatchVtbl{} ' .lpvtbl = 01874A8
A. Object id'n som er 1880EBC burde du kjenne igjen, har ikke noen spesiell betydning anna en att den refererer til stringen med navnet ditt i.
__vba4Val returns DWORD:2
- pVar(variant)
  signed long .lVal = 2 0x00000007
B. Sjekker hvor i stringen den skal starte og lese neste bokstav fra, f.eks. som er begynner den på 2 som er r og som er neste bokstav i eventyret vårt.
Asc returns Integer:114
- String string = 0013B5A4
  = "r"
C. Som jeg sa over.. her går det unna...
__vbaVarMul returns DWORD:12F60C
- lhs(variant)
  signed short .iVal = 114 0x0072
- rhs(variant)
  signed short iVal = 7 0x0007
D. r er 114 i asc og blir ganga med 7 her, den kjører samma gange, adde og minus funksjoner på hver, det ser du også utifra att alt er likt i smartcheck som på forrige bokstav. Det langt fra alltid att alle bokstaver blir 'behandla' linkt.
__vbaVarAdd returns DWORD:12FBC
- lhs(variant)
  signed long .lVal = 51909 0x0000CAC5
- rhs(variant)
  signed long .lVal = 70389 0x000112F5
E. Her har vi kommet så langt att vi legger resultatet av r til resultatet av T.
__vbaForNext returns DWORD:1
- counter(variant)
  signed long .lVal = 2 0x00000002
- void * data1 = 0012F550
- void * data2 = 0012F540
F. Så.. her sjekker vi om vi skal ta ei runde til, og det gjør den ser du.. 2 tallet indikerer verdien på For Next variablen i det den er på bunn av løkka. Så her er verdien 2 for r er bokstav nummer to.

Oppsumeringa...

Såh.. nå har du gått igjennom hele dritten.. og algo'n er:
ascii verdi av bokstav * 7 * 4 * 22 - 291 + 456
Legger sammen resultatet av hver bokstav.. og da får du hva? Joda.. ett serial!
Her har du en < keygen >.

Jeg har en annen liten literaturbit som jeg har kun forklaringer på funksjoner. Neste vb tutorials vil ikke ha bilder tror jeg, hvertfall ikke så mange som her, så jeg regner med att etter å ha lest denne så behøver du ikke ha noen bilder.. da kan du bruke ren telepati.

Final words...

JajaJa.. håper du drar nytte av denne lille biten av VB vs SmartCheck. Det er nytting hvis du for eksempel programerer i VB og vil beskytte programmet ditt mot f.eks. crackere, da sier det seg selv att hvis du kan finne koden ved hjelp av det du har lest her att du har ett problem. Ett lite hint da er å gjøre det vanskeligere med VB, ikke bruke tredjeparts programmer. Eller.. fra en crackers point of view, gå rait ahead..

mvh
Trevil

#Cracking.no på EFNet er et koselig sted


Trevil [C] 2002