Jump to content

UnHackable HWID protection


ibrahem
 Share

Recommended Posts

This is not actually a UDF

it is an idea to make HWID protection unable to be hacked if the user managed to Get HWIDs list and modified it to add his HWID

the idea is that you modify the real hwid to make new hwid (fake hwid) and modify the (fake hwid) to make (shown hwid)   by using StringReplace("","")

the (real hwid) and (fake hwid) will not be shown to the user ,but (shown hwid ) will be shown ...

when the user gives you his (shown hwid),you modify it back to (fake hwid)

the (fake hwid) will be put on the online HWIDs list ..

when the user who has bought  licence , whose fake hwid was put on the online list , open the program 

, the program would get the user's fake hwid and compare it with the online list and if it was found, the program would work

... else, the program would ask the user to buy a licence

so if the user put his/her ( shown hwid ) on the list, the program would not work as the program looks for the (fake hwid) not the (shown hwid)

> i hope you like this idea...this idea can be used in all scripting languages 

^_^

here is the script

;~ By  ÅÈÑÇåíã ÚÕÇã ÇáÏíä / ibrahem


#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <String.au3>
#include <Crypt.au3>
#include <Array.au3>

CheckForDebuggers()

Global $FAKEhwid, $FAKEhwid, $REALhwid, $SHOWNhwid, $RealConvertedHwid, $SHOWNtext, $num, $CheckResult, $SAVEDfakeHWID
$num = 0
$REALhwid = _GetHWID()
ConvertRealHwidToFakeHwid()
ConvertFakeHwidToShownHwid()
$SAVEDfakeHWID = $FAKEhwid
$SHOWNtext = $SHOWNhwid
check()
If $CheckResult <> 1 Then LicenceForm()                                         ; If hwid was not found then ask to buy licence


Func LicenceForm()
    MouseMove(MouseGetPos(0), MouseGetPos(1), 1)

    #Region ### START Koda GUI section ###
    $regester = GUICreate("                                                                                Subscribe Form ", 666, 51, -1, -1)
    $InputHWID = GUICtrlCreateInput($SHOWNhwid, 96, 8, 489, 32, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY))
    GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
    $buyLicence = GUICtrlCreateButton("Subscribe ", 8, 8, 73, 33)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $copyHWID = GUICtrlCreateButton("Copy", 600, 8, 57, 33)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit

            Case $copyHWID
                ClipPut($SHOWNtext)

            Case $buyLicence
                            ;How  users can buy licence.. Ex:Shellexecute("your FB page")..or MsgBox(0,"my phone number", "phone number") ; buy licence action ....etc.

        EndSwitch
    WEnd


EndFunc   ;==>LicenceForm

Func check()

    Do
        Call("SearchForHwid")
        If $FAKEhwid = $FAKEhwid[$num] Then MsgBox(0, "", "done")
        $num = $num + 1
        If $FAKEhwid[$num] = "finish" Then ExitLoop
        If $SAVEDfakeHWID = $FAKEhwid[$num] Then
            ; What happens (after hwid is found / if th user has licence)
            $CheckResult = 1
            ExitLoop
        EndIf
    Until $FAKEhwid = "finsh"

EndFunc   ;==>check

Func SearchForHwid()

    $Source = BinaryToString(InetRead('link of raw online hwids list', 1));(((((((((((((((((((((((((((link of raw online hwids list)))))))))))))))))))))))))

    $reader = _StringBetween($Source, '{', '}')

    For $a In $reader
        $FAKEhwid = _StringBetween($Source, '{', '}')
        ConsoleWrite($FAKEhwid[$num] & @CRLF)
    Next
EndFunc   ;==>SearchForHwid

Func _GetHWID()
    Local $aDrives = DriveGetDrive('FIXED'), $sOutput = ''
    If @error = 0 Then
        For $i = 1 To $aDrives[0]
            $sOutput &= DriveGetSerial($aDrives[$i])
        Next
    EndIf
    $aDrives = DriveGetDrive('CDROM')
    If @error = 0 Then
        For $i = 1 To $aDrives[0]
            $sOutput &= DriveGetSerial($aDrives[$i])
        Next
    EndIf
    Local $aMemory = MemGetStats()
    $sOutput &= @OSVersion & @OSBuild & @OSArch & @CPUArch & @KBLayout & $aMemory[1]
    $aMemory = 0
    $sOutput = StringStripWS($sOutput, 8)
    Local $sHash = StringTrimLeft(_Crypt_HashData($sOutput, $CALG_MD5), 2)
    Return StringMid($sHash, 1, 8) & '-' & StringMid($sHash, 9, 4) & '-' & StringMid($sHash, 13, 4) & '-' & StringMid($sHash, 17, 4) & '-' & StringMid($sHash, 21, 12)
EndFunc   ;==>_GetHWID

Func ConvertRealHwidToFakeHwid()
    $FAKEhwid = $REALhwid
    $FAKEhwid = StringReplace($FAKEhwid, "A", "Z")
    $FAKEhwid = StringReplace($FAKEhwid, "B", "1")
    $FAKEhwid = StringReplace($FAKEhwid, "C", "M")
    $FAKEhwid = StringReplace($FAKEhwid, "D", "C")
    $FAKEhwid = StringReplace($FAKEhwid, "E", "D")
    $FAKEhwid = StringReplace($FAKEhwid, "F", "H")
    $FAKEhwid = StringReplace($FAKEhwid, "G", "I")
    $FAKEhwid = StringReplace($FAKEhwid, "H", "L")
    $FAKEhwid = StringReplace($FAKEhwid, "I", "O")
    $FAKEhwid = StringReplace($FAKEhwid, "J", "V")
    $FAKEhwid = StringReplace($FAKEhwid, "K", "E")
    $FAKEhwid = StringReplace($FAKEhwid, "L", "Y")
    $FAKEhwid = StringReplace($FAKEhwid, "M", "U")
    $FAKEhwid = StringReplace($FAKEhwid, "N", "A")
    $FAKEhwid = StringReplace($FAKEhwid, "O", "7")
    $FAKEhwid = StringReplace($FAKEhwid, "P", "2")
    $FAKEhwid = StringReplace($FAKEhwid, "Q", "3")
    $FAKEhwid = StringReplace($FAKEhwid, "R", "4")
    $FAKEhwid = StringReplace($FAKEhwid, "S", "5")
    $FAKEhwid = StringReplace($FAKEhwid, "T", "P")
    $FAKEhwid = StringReplace($FAKEhwid, "U", "Q")
    $FAKEhwid = StringReplace($FAKEhwid, "V", "J")
    $FAKEhwid = StringReplace($FAKEhwid, "W", "K")
    $FAKEhwid = StringReplace($FAKEhwid, "X", "N")
    $FAKEhwid = StringReplace($FAKEhwid, "Y", "9")
    $FAKEhwid = StringReplace($FAKEhwid, "Z", "X")
    $FAKEhwid = StringReplace($FAKEhwid, "1", "8")
    $FAKEhwid = StringReplace($FAKEhwid, "2", "G")
    $FAKEhwid = StringReplace($FAKEhwid, "3", "W")
    $FAKEhwid = StringReplace($FAKEhwid, "4", "R")
    $FAKEhwid = StringReplace($FAKEhwid, "5", "0")
    $FAKEhwid = StringReplace($FAKEhwid, "6", "B")
    $FAKEhwid = StringReplace($FAKEhwid, "7", "F")
    $FAKEhwid = StringReplace($FAKEhwid, "8", "S")
    $FAKEhwid = StringReplace($FAKEhwid, "9", "6")
    $FAKEhwid = StringReplace($FAKEhwid, "0", "T")
    $FAKEhwid = StringReplace($FAKEhwid, "-", "-")
EndFunc   ;==>ConvertRealHwidToFakeHwid

Func ConvertFakeHwidToShownHwid()
    $SHOWNhwid = $FAKEhwid
    $SHOWNhwid = StringReplace($SHOWNhwid, "A", "Z")
    $SHOWNhwid = StringReplace($SHOWNhwid, "B", "1")
    $SHOWNhwid = StringReplace($SHOWNhwid, "C", "M")
    $SHOWNhwid = StringReplace($SHOWNhwid, "D", "C")
    $SHOWNhwid = StringReplace($SHOWNhwid, "E", "D")
    $SHOWNhwid = StringReplace($SHOWNhwid, "F", "H")
    $SHOWNhwid = StringReplace($SHOWNhwid, "G", "I")
    $SHOWNhwid = StringReplace($SHOWNhwid, "H", "L")
    $SHOWNhwid = StringReplace($SHOWNhwid, "I", "O")
    $SHOWNhwid = StringReplace($SHOWNhwid, "J", "V")
    $SHOWNhwid = StringReplace($SHOWNhwid, "K", "E")
    $SHOWNhwid = StringReplace($SHOWNhwid, "L", "Y")
    $SHOWNhwid = StringReplace($SHOWNhwid, "M", "U")
    $SHOWNhwid = StringReplace($SHOWNhwid, "N", "A")
    $SHOWNhwid = StringReplace($SHOWNhwid, "O", "7")
    $SHOWNhwid = StringReplace($SHOWNhwid, "P", "2")
    $SHOWNhwid = StringReplace($SHOWNhwid, "Q", "3")
    $SHOWNhwid = StringReplace($SHOWNhwid, "R", "4")
    $SHOWNhwid = StringReplace($SHOWNhwid, "S", "5")
    $SHOWNhwid = StringReplace($SHOWNhwid, "T", "P")
    $SHOWNhwid = StringReplace($SHOWNhwid, "U", "Q")
    $SHOWNhwid = StringReplace($SHOWNhwid, "V", "J")
    $SHOWNhwid = StringReplace($SHOWNhwid, "W", "K")
    $SHOWNhwid = StringReplace($SHOWNhwid, "X", "N")
    $SHOWNhwid = StringReplace($SHOWNhwid, "Y", "9")
    $SHOWNhwid = StringReplace($SHOWNhwid, "Z", "X")
    $SHOWNhwid = StringReplace($SHOWNhwid, "1", "8")
    $SHOWNhwid = StringReplace($SHOWNhwid, "2", "G")
    $SHOWNhwid = StringReplace($SHOWNhwid, "3", "W")
    $SHOWNhwid = StringReplace($SHOWNhwid, "4", "R")
    $SHOWNhwid = StringReplace($SHOWNhwid, "5", "0")
    $SHOWNhwid = StringReplace($SHOWNhwid, "6", "B")
    $SHOWNhwid = StringReplace($SHOWNhwid, "7", "F")
    $SHOWNhwid = StringReplace($SHOWNhwid, "8", "S")
    $SHOWNhwid = StringReplace($SHOWNhwid, "9", "6")
    $SHOWNhwid = StringReplace($SHOWNhwid, "0", "T")
    $SHOWNhwid = StringReplace($SHOWNhwid, "-", "-")
EndFunc   ;==>ConvertFakeHwidToShownHwid


Func CheckForDebuggers()  ; this func closes some known proxy debuggers


    ; Charles
    If WinExists("Charles") Then WinClose("Charles")
    If ProcessExists("Charles.exe") Then ProcessClose("Charles")

    ; Fiddler
    If WinExists("Fiddler") Then WinClose("Fiddler")
    If ProcessExists("Fiddler.exe") Then ProcessClose("Fiddler.exe")

    ; Wireshark
    If ProcessExists("Wireshark.exe") Then ProcessClose("Wireshark.exe")
    If WinExists("Wireshark") Then WinClose("Wireshark")

    ; OllyDbg
    If WinExists("OllyDbg") Then WinClose("OllyDbg")
    If ProcessExists("OLLYDBG.EXE") Then ProcessClose("OLLYDBG.EXE")

    ; just expectation
    If WinExists("Developer") Then WinClose("Developer")
    If WinExists("debug") Then WinClose("debug")
    If WinExists("debugger") Then WinClose("debugger")
    If WinExists("debuger") Then WinClose("debuger")

EndFunc   ;==>CheckForDebuggers

..

and here is the tool that modifies the ( shown hwid ) back to ( fake hwid ) ,which will be put on the online list 

warning !!!! : YOU Mustn't Give This Tool To the user ... it is only for you ..if you give it to the user , he/she will be able to put his (fake hwid) on the list

#NoTrayIcon
AutoItSetOption("trayiconhide", 1)

Global $fakehwid, $num, $num1
$num = ""
$num1 = ""

#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>


MouseMove(MouseGetPos(0), MouseGetPos(1), 1)
#Region ### START Koda GUI section ### Form=
    $form = GUICreate("                                 Convert   $SHOWNhwid   to   $FAKEhwid", 490, 99, -1, -1)
    $inputhwid = GUICtrlCreateInput("", 8, 8, 473, 32, BitOR($gui_ss_default_input, $es_center, $es_readonly))
    GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
    $paste = GUICtrlCreateButton("Paste", 336, 48, 137, 41)
    GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
    $convert = GUICtrlCreateButton("Convert", 176, 48, 137, 41)
    GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
    $copy = GUICtrlCreateButton("Copy", 16, 48, 137, 41)
    GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
    $nmsg = GUIGetMsg()
    Switch $nmsg
        Case $gui_event_close
            Exit
        Case $paste
            GUICtrlSetData($inputhwid, ClipGet())
        Case $convert
            convertshownhwidtofakehwid()
            GUICtrlSetData($inputhwid, $fakehwid)
        Case $copy
            ClipPut(GUICtrlRead($inputhwid))
    EndSwitch
WEnd

Func convertshownhwidtofakehwid()
    $fakehwid = GUICtrlRead($inputhwid)
    Do
        $num = $num + 1
        $fakehwid = StringReplace($fakehwid, "A", "Z")
        $fakehwid = StringReplace($fakehwid, "B", "1")
        $fakehwid = StringReplace($fakehwid, "C", "M")
        $fakehwid = StringReplace($fakehwid, "D", "C")
        $fakehwid = StringReplace($fakehwid, "E", "D")
        $fakehwid = StringReplace($fakehwid, "F", "H")
        $fakehwid = StringReplace($fakehwid, "G", "I")
        $fakehwid = StringReplace($fakehwid, "H", "L")
        $fakehwid = StringReplace($fakehwid, "I", "O")
        $fakehwid = StringReplace($fakehwid, "J", "V")
        $fakehwid = StringReplace($fakehwid, "K", "E")
        $fakehwid = StringReplace($fakehwid, "L", "Y")
        $fakehwid = StringReplace($fakehwid, "M", "U")
        $fakehwid = StringReplace($fakehwid, "N", "A")
        $fakehwid = StringReplace($fakehwid, "O", "7")
        $fakehwid = StringReplace($fakehwid, "P", "2")
        $fakehwid = StringReplace($fakehwid, "Q", "3")
        $fakehwid = StringReplace($fakehwid, "R", "4")
        $fakehwid = StringReplace($fakehwid, "S", "5")
        $fakehwid = StringReplace($fakehwid, "T", "P")
        $fakehwid = StringReplace($fakehwid, "U", "Q")
        $fakehwid = StringReplace($fakehwid, "V", "J")
        $fakehwid = StringReplace($fakehwid, "W", "K")
        $fakehwid = StringReplace($fakehwid, "X", "N")
        $fakehwid = StringReplace($fakehwid, "Y", "9")
        $fakehwid = StringReplace($fakehwid, "Z", "X")
        $fakehwid = StringReplace($fakehwid, "1", "8")
        $fakehwid = StringReplace($fakehwid, "2", "G")
        $fakehwid = StringReplace($fakehwid, "3", "W")
        $fakehwid = StringReplace($fakehwid, "4", "R")
        $fakehwid = StringReplace($fakehwid, "5", "0")
        $fakehwid = StringReplace($fakehwid, "6", "B")
        $fakehwid = StringReplace($fakehwid, "7", "F")
        $fakehwid = StringReplace($fakehwid, "8", "S")
        $fakehwid = StringReplace($fakehwid, "9", "6")
        $fakehwid = StringReplace($fakehwid, "0", "T")
        $fakehwid = StringReplace($fakehwid, "-", "-")
    Until $num = 209
    $num = 0
EndFunc

The online list of HWiDs must be written like this :

{start}
{(Fake HWiD 1)}
{(Fake HWiD 2)}
{(Fake HWiD 3)}
{(...etc)}
{finish}

if you like it .  give me a "like"  ^_^:)

🙏 sorry for bad English 

Edited by ibrahem
Link to comment
Share on other sites

never say "unhackable".

I can think of several ways this concept can be defeated. 

  • You posted the script here so a user can get it
  • memory reading
  • google - researching on how to get around the problem

Good idea on how to stop most of them though. 

Link to comment
Share on other sites

2 hours ago, Bert said:

never say "unhackable".

I can think of several ways this concept can be defeated. 

  • You posted the script here so a user can get it
  • memory reading
  • google - researching on how to get around the problem

Good idea on how to stop most of them though. 

You also con change the way to modify hwid by StringReplace("","") 

For example :

19 hours ago, ibrahem said:

    $FAKEhwid = StringReplace($FAKEhwid, "A", "Z")

You can replace "A" with "B" instead of "Z"

,but you should rewrite the script so that when you modify the (shown hwid)  back to (fake hwid),  the (shown hwid) doesn't become another (fake hwid) ((  not the first one))

...

Also,you should not replace two different strings with the same string

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...