in the Conditional Statement
if ((cVar1 = func_0x8b4c55a0(), cVar1 == -0xe) || 1)
CVar1 is initialised and then evaluated
func_0x8b4c55a0() returns random garbage (basically it will return what was in eax register prior to calling the function
now this can be -0xe or anything else from 0x0 to 0xffffffff
so the if will result in either True or ...
I am unsure what you mean by "solving" this, but the meaning of the code is rather obvious and even more so in the screenshot you provided. Simplified version:
add [esp], 5
xor eax, eax
And with annotations:
call $+5 ; call address of next instruction, placing return address on stack (esp)
add [esp], 5 ; add 5 bytes to the ...
There are ways to make a Python program hard to reverse engineer. Its' possible but you need to fiddle with the Python source code (which is written in C) and compile a special build for your purpose.
The way Python works is fully documented and open-source. For instance, consider the pyc file format. Much of the code which deals with reading/writing pyc's ...
Yes, if the input is not 0-terminated. If that's the case, strlen will happily continue counting bytes until it finds one, moving out of the input's bounds. It then depends on how clean the memory is where the input is allocated.
These are functions exported by ordinal rather than by name.
This being a C++ library the actual (mangled) function names are long (up to 200 characters with an average of over 50.) Dynamic linking using names in this case would involve lots of long string comparisons that would slow down the loading of applications using this library.