General > The Laboratory
Function to create random strings
Vortex:
This is a function similar to Hutch's random string generator :
http://masm32.com/board/index.php?topic=8881.0
--- Code: ---.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\msvcrt.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\msvcrt.lib
RandStr PROTO :DWORD,:DWORD
.data?
buffer db 64 dup(?)
.code
start:
invoke RandStr,ADDR buffer,64
invoke ExitProcess,0
RandStr PROC uses esi ebx string:DWORD,stringLen:DWORD
LOCAL _st:SYSTEMTIME
invoke GetSystemTime,ADDR _st
movzx ebx,SYSTEMTIME.wMilliseconds[_st]
@@:
invoke crt_rand
sub ebx,1
jnz @b
mov esi,string
mov edi,255
mov ebx,stringLen
@@:
invoke crt_rand
; xor edx,edx
; div edi
; mov BYTE PTR [esi],dl
mov BYTE PTR [esi],al
add esi,1
sub ebx,1
jnz @b
mov eax,string
ret
RandStr ENDP
END start
--- End code ---
Thanks to Hutch for the original PowerBASIC version.
jj2007:
How does it work, Erol? With Masm32 "print" I get this:
--- Code: ---¡¤ı░╩' ÏØ¶M¶y'YB|£┴°═îç #d©ªçòL░ZìN-Öþ=▒`Ì▒ÇAÚgAÑıƒõ↑ƒ§B
--- End code ---
--- Code: --- invoke RandStr,ADDR buffer,64
print addr buffer
invoke ExitProcess,0
--- End code ---
See also here.
hutch--:
JJ,
That's what its supposed to do, generate random binary strings for things like window class names and private message strings. It is different each time the app starts which makes identifying a running app far more difficult.
jj2007:
--- Quote from: hutch-- on October 29, 2020, 11:48:08 AM ---random binary strings for things like window class names and private message strings
--- End quote ---
Is it documented somewhere that all Windows versions tolerate non-Ascii (or non-Utf8) strings for such purposes?
If not, I would suggest something along these lines:
--- Code: ---include \masm32\MasmBasic\MasmBasic.inc
Rand$Buffer db 21 dup(?) ; simple macro to generate random names
Rand$ MACRO
push edi
push ecx
mov edi, offset Rand$Buffer
xor ecx, ecx
.Repeat
add Rand(26), 97 ; lowercase a-z
mov byte ptr [edi+ecx], al
inc ecx
.Until ecx>=20
xchg eax, edi
pop ecx
pop edi
exitm <eax>
ENDM
Init
xor ecx, ecx
.Repeat
PrintLine Str$(ecx), Tb$, Rand$()
inc ecx
.Until ecx>=20
MsgBox 0, "ok?", "Hi", MB_OK
EndOfCode
--- End code ---
Output:
--- Code: ---0 hgkdugsoymqlnuhekjrl
1 qjgllyaczfaqgytbcflt
2 jfpimsnesezizoxiqggj
3 uhzrgvbnekpucfixjywa
4 trmiqelwactabxvaewvf
5 jbmijqoeaiusqmijxjnf
6 ktyuyseayxfqrrnwlgfh
7 vmermmcpbnqisysjcodv
8 zbmpbvssfaalssgintim
9 vcfnbdixserndiupzhiy
10 qkqafqlkhpehfhuqxyvg
11 eztrbonqwnqtqsadmlgx
12 ivvriptscgynlspuztck
13 elzaubshhezywxceytmc
14 quflzoeqjuclbuvndeos
15 xvuirculozaoknzblxyk
16 wgsiohaskhbjuzoroatq
17 mvvxorhwgzimzhvtfwxf
18 lfmphjrukrhwtoaqcffr
19 mcogdlegsjmjfcibzkcj
--- End code ---
jj2007:
Btw all suggestions suffer from the fact that a clever coder can do an EnumWindows and find window names that contain non-Ascii characters. Even the one below is not safe in this respect: find a window whose name starts with "x", or any window containing multiple numbers, etc.
In pure Masm32 code:
--- Code: ---include \masm32\include\masm32rt.inc
.686p
.data?
Rand$Buffer db 21 dup(?)
.code
Rand$ MACRO ; simple macro to generate random names
rdtsc
invoke lstrcpy, offset Rand$Buffer, str$(eax)
mov byte ptr Rand$Buffer, "x"
exitm <offset Rand$Buffer>
ENDM
start:
xor ebx, ebx
.Repeat
print str$(ebx), 9
print Rand$(), 13, 10
invoke Sleep, 100
inc ebx
.Until ebx>=20
MsgBox 0, "ok?", "Hi", MB_OK
exit
end start
--- End code ---
Output:
--- Code: ---0 x034471557
1 x2009285427
2 x1754927414
3 x1501939927
4 x1245299944
5 x988643757
6 x731742907
7 x474656169
8 x218009469
9 x9105431
10 x96267723
11 x53192993
12 x10338773
13 x067610048
14 x324033156
15 x583438831
16 x840354643
17 x096978243
18 x1936173115
19 x1679015015
--- End code ---
If I seriously wanted to hide my application, I would enum all active windows and randomly use one of the existing names.
Navigation
[0] Message Index
[#] Next page
Go to full version