// Script for OllyScript plugin by SHaG - http://ollyscript.apsvans.com // Second Version of Haldir's Flexlm Seedfinder Script for Ollydbg // Supported should be every Flexlm version >=7.2 // Remove all BP in the code before running this script // Codebase is usually 00401000 for .exe or 10001000 for .dll // In more recent Flexlm versions you need a faked license (like Feature f1 1.000 permanent uncounted HOSTID=ANY SIGN=12345678) // otherwise it might not work var jobstruct var codebase // start msgyn "Did you remove all BPs?" cmp $RESULT,1 je setup ret setup: ask "Enter Codebase of the Flexlm Module" cmp $RESULT, 0 je cancel mov codebase, $RESULT jmp findlsg cancel: msg "Please enter Codebase" ret // It searches for a cmp with 0x87654321, which is located below a call to l_sg // Then we calculate the offset for the call and execute to it findlsg: var pos var callpos find codebase, #81BD????????21436587# mov pos, $RESULT cmp pos, 0 je error mov callpos, pos sub callpos, 07 sub pos, 03 add pos,[callpos] eval "l_sg is at: 0x{pos}" msg $RESULT go pos jmp lsg error: msg "An unknown error occured" // The call to l_n36_buff is a call dword ptr, so we calc its offset again and execute to it lsg: var pos var n36pos mov pos, eip find pos, #FF15????????# mov pos, $RESULT add pos,2 mov n36pos, [pos] mov pos, [n36pos] eval "l_n36_buff is at: 0x{pos}" msg $RESULT go pos jmp n36buff // We patch the Jobstruct at the EB05 jmp shortly above the vendor name loop n36buff: var pos mov pos, eip find pos, #EB05# mov pos, $RESULT go pos jmp findjobstruct // We check the registers to find the job struct (we check only edx and ecx (haven't seen anything else yet)) findjobstruct: var check mov check, [edx] cmp check, 66 mov jobstruct, edx je found mov check, [ecx] cmp check, 66 mov jobstruct, ecx je found jmp error // Now we delete the rand() values in the job struct and execute to the end and fish the seeds from there found: add jobstruct, 04 fill jobstruct,10,00 rtr var seed1 var seed2 var struct var tempstruct mov struct, ebp add struct, 10 mov tempstruct, [struct] add tempstruct,4 mov seed1, [tempstruct] add tempstruct,4 mov seed2, [tempstruct] eval "Your seeds are Seed1: 0x{seed1} and Seed2: 0x{seed2}" msg $RESULT ret // [BACK]