compile time string manipulation
akcom
CppCoder at gmail.com
Sat Apr 7 08:47:05 PDT 2007
Unfortunately the string still shows up in plain text in my executable.
Regards,
Alex
"Thomas Kuehne" <thomas-dloop at kuehne.cn> wrote in message
news:slrnf1ekkm.cq2.thomas-dloop at birke.kuehne.cn...
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> akcom schrieb am 2007-04-07:
>> I'm trying to change a string at compile time to avoid static analysis.
>> Example:
>>
>> T[] obfuscate(T)( T[] buf )
>> {
>> return cast(char)(buf[0] ^ 0xCC) ~ obfuscate( buf[1..$] );
>> }
>>
>> char []unobfuscate( char []str )
>> {
>> char []result = new char[str.length];
>> foreach ( idx, c; str )
>> {
>> result[idx] = c ^ 0xCC;
>> }
>> return result;
>> }
>>
>> in my code I have something like Stdout.formatln( "hello {0}",
>> unobfuscate( obfuscate( "world!" ) ) );
>> What I'd like to happen, is for obfuscate to get evaluated at compile
>> time
>> so that instead of "world!" being visible in my executable's binary data,
>> it
>> would be something like 0x77 0x6F 0x72 0x6C 0x64 0x21. unobfuscate would
>> get called at runtime and would transform the string back to it's
>> original
>> form. Any ideas? (Note: I'm aware that obfuscate will throw an
>> ArrayOutOfBounds exception, it's just to explain what I'm trying to do).
>
> # char[] obfuscate(char[] buf){
> # char[] result;
> # foreach(c; buf){
> # result ~= c ^ 0xCC;
> # }
> # return result;
> # }
> #
> # template compiletime(char[] m){
> # const compiletime = m;
> # }
> #
> # import std.stdio;
> #
> # void main(){
> # writefln("%s", cast(ubyte[]) compiletime!(obfuscate("hello!")));
> # }
>
> Thomas
>
>
> -----BEGIN PGP SIGNATURE-----
>
> iD8DBQFGF1KLLK5blCcjpWoRAlxyAJ45HvncahcYt7wsfxiJtkRw7Kfr3gCfc4bI
> 6lXl/OqnVHLQPpCJlSNzs0o=
> =eHGg
> -----END PGP SIGNATURE-----
More information about the Digitalmars-d-learn
mailing list