sope
April 29th, 2003, 08:56
Hello Everybody
I am working on a Sentinel Super Pro Target, I don't have access to the Dongle. If any body who can look at this target, & tell me if its really possible without dongle because after tracing, logging i see that the programmer never compares the return value which is read from the dongle.
It reads the words, copies word to different places then joins the 3 words from different cell & pass that as parameters to a dll file. Which copies, to some other address does something then pushes BADNUM offset & then compares it & again we r in some dlls its such a confusion i just can't put it on paper.
Hope to get atleast hints so that i keep moving & learning + shareing too
Regards
Sope!
Below is the things which i have already noted on this target.
(1) sprofindfirstunit 0x7745E0
(2) SproRead 0x7747B0
(3) SproActivate 0x774920
(4) SproExtentedRead 0x774860
(5) SproDecrement 0x766FB3
(6) SproQuery 0x774BA0
(1) Trival emulation for sprofindfirstunit and it's done.
Before we reach SproRead(), diged this part of the program
Now this is wired stuff i haven't see anything like this there is approx. 427 parameters pushed & calls a function some manipulation goes there in that function. i did not understood whats going in there.
I noted the eax value from the functions returned & only thing i understood was if we subtract we get exactly 0x3E00 bytes. So that much chunks of bytes manipulated or initialized.
0x30EDE00 - 0x30E8080 - 0x3E00 bytes similarly for the rest of it.
Now i reach SproRead(). I don't rip any code here for it.
:00413CD3 Call 414290 <--- reads Cell 0 & Cell 1 stores in EAX.
Cell 1 is recovered from sproFindFirstUnit() & Cell 0 dongle id i put 0x1111 so in EAX i had 0x1111CB46 which is stored at 0x2FAF8D8. Delayed checking it gets XOR with static value 0x42FCE52A then stored.
Next i reach below code
:00413D33 call sub_4142F0 <--- this call Reads Cell 1F, 22, 25, 20, 23, 26, 21, 24, 27
:00413D38 push offset aBadnum ; "BADNUM"
:00413D3D lea ecx, [esp+32]
:00413D41 mov [esp+230h], ebx
:00413D48 call sub_411330
I don't rip any code here. What i does i'll explain here in short.
It takes 2 parameters first is the Address where the word from the Cell Read
will be stored, second the Cell number.
sub_414110 which calls sproread is been cross reference from 22 different location. Cell: 1E, 2B, 2C, 32, 33, 34, 35, 36, 2D, 2E i never reach this part of the program.
Next i reach. as name suggest BADNUM. Till here there is no checking what word it read from the dongle.
:00413D38 push offset aBadnum ; "BADNUM"
:00413D3D lea ecx, [esp+32]
:00413D41 mov [esp+230h], ebx
:00413D48 call sub_411330 <--- Copy Words from dongle read to some location.
Then call again routines of reading Cell 0 & Cell 1 & then again Cell 1F, 22, 25, 20, 23, 26, 21, 24, 27. Its difficult to put on paper now where things gets copied, read manipulated etc...
Assumption:
While going through the string reference i also see some license file which i guess is required for proper execution. Ref to file with ".sec" is suspicious. 0xB0EA34 is the ref to some file with ".sec" extension.
I am working on a Sentinel Super Pro Target, I don't have access to the Dongle. If any body who can look at this target, & tell me if its really possible without dongle because after tracing, logging i see that the programmer never compares the return value which is read from the dongle.
It reads the words, copies word to different places then joins the 3 words from different cell & pass that as parameters to a dll file. Which copies, to some other address does something then pushes BADNUM offset & then compares it & again we r in some dlls its such a confusion i just can't put it on paper.
Hope to get atleast hints so that i keep moving & learning + shareing too

Regards
Sope!
Below is the things which i have already noted on this target.
(1) sprofindfirstunit 0x7745E0
(2) SproRead 0x7747B0
(3) SproActivate 0x774920
(4) SproExtentedRead 0x774860
(5) SproDecrement 0x766FB3
(6) SproQuery 0x774BA0
Code:
:00766C70 push 0CB46h <--- Developer ID.
:00766C75 push edi <--- rnbo handle
:00766C76 call sproFindFirstUnit
(1) Trival emulation for sprofindfirstunit and it's done.
Before we reach SproRead(), diged this part of the program
Now this is wired stuff i haven't see anything like this there is approx. 427 parameters pushed & calls a function some manipulation goes there in that function. i did not understood whats going in there.
Code:
:00768100 mov eax, dword_B745BC ; <--- move Flag check variable
:00768105 test eax, eax
:00768107 jnz short locret_76813B
:00768109 mov dword_B745BC, 1 ; <--- move 1 to the Flag
Below functions pushes 427 times some values & calls 1 functions.
:00768113 call sub_7D2D10 ; After the call eax=0x30E0480
:00768118 call sub_7C56D0 ; eax=0x30E4280
:0076811D call sub_7B7FC0 ; eax=0x30E8080
:00768122 call sub_7AA7D0 ; eax=0x30EDE00
:00768127 call sub_79D2F0 ; eax=0x30F1C00
:0076812C call sub_78FB40 ; eax=0x30F5A00
:00768131 call sub_782480 ; eax=0x30F9800
:00768136 jmp loc_774E50 ; eax=0x30FD600
I noted the eax value from the functions returned & only thing i understood was if we subtract we get exactly 0x3E00 bytes. So that much chunks of bytes manipulated or initialized.
0x30EDE00 - 0x30E8080 - 0x3E00 bytes similarly for the rest of it.
Now i reach SproRead(). I don't rip any code here for it.
:00413CD3 Call 414290 <--- reads Cell 0 & Cell 1 stores in EAX.
Cell 1 is recovered from sproFindFirstUnit() & Cell 0 dongle id i put 0x1111 so in EAX i had 0x1111CB46 which is stored at 0x2FAF8D8. Delayed checking it gets XOR with static value 0x42FCE52A then stored.
Next i reach below code
:00413D33 call sub_4142F0 <--- this call Reads Cell 1F, 22, 25, 20, 23, 26, 21, 24, 27
:00413D38 push offset aBadnum ; "BADNUM"
:00413D3D lea ecx, [esp+32]
:00413D41 mov [esp+230h], ebx
:00413D48 call sub_411330
I don't rip any code here. What i does i'll explain here in short.
It takes 2 parameters first is the Address where the word from the Cell Read
will be stored, second the Cell number.
Code:
-----------------------------------------------------------------
Address Cell No. Address Cell No. Address Cell No.
-----------------------------------------------------------------
0x2FAF88A 0x1F 0x2FAF88A 0x20 0x2FAF88A 0x21
0x2FAF890 0x22 0x2FAF890 0x23 0x2FAF890 0x24
0x2FAF888 0x25 0x2FAF888 0x26 0x2FAF888 0x27
Note: Address 0x2FAF88A stores for 1F / 20 / 21
0x2FAF890 stores for 22 / 23 / 24
0x2FAF888 stores for 25 / 26 / 27
sub_414110 which calls sproread is been cross reference from 22 different location. Cell: 1E, 2B, 2C, 32, 33, 34, 35, 36, 2D, 2E i never reach this part of the program.
Next i reach. as name suggest BADNUM. Till here there is no checking what word it read from the dongle.
:00413D38 push offset aBadnum ; "BADNUM"
:00413D3D lea ecx, [esp+32]
:00413D41 mov [esp+230h], ebx
:00413D48 call sub_411330 <--- Copy Words from dongle read to some location.
Then call again routines of reading Cell 0 & Cell 1 & then again Cell 1F, 22, 25, 20, 23, 26, 21, 24, 27. Its difficult to put on paper now where things gets copied, read manipulated etc...
Assumption:
While going through the string reference i also see some license file which i guess is required for proper execution. Ref to file with ".sec" is suspicious. 0xB0EA34 is the ref to some file with ".sec" extension.