First post, by dennis714
An emulation of old copy-protection dongle for DOS software can be implemented right in DosBox DOS emulator.
Here is my patches for DosBox 0.74, enabling it to support 93c46-based dongle:
http://conus.info/stuff/dosbox/dongle.cpp
http://conus.info/stuff/dosbox/dosbox.cpp.patch
At least old Rainbow Sentinel Cplus and MicroPhar are 93c46-based dongles.
93c46 memory chip contain 64*16 words. More on it here:
http://www.atmel.com/dyn/resources/prod_docum … nts/doc0172.pdf
Source code is self-explanatory. What you need is to add dongle.cpp to project, patch dosbox.cpp, fill MEMORY array representing dongle memory. You may also need to change rewiring scheme between 93c46 and printer port. Wiring scheme may differ from dongle to dongle, but usually, DI (data input), SK (clock), CS (chip select) and power lines are taken from D0..D7 in some order. DO (data output) may be connected to ACK or BUSY printer lines.
Now how to read 93c46-based dongle? Get a free reader there (sread.zip):
http://safe-key.com/freesoftware.html
It produce crypted file, however, sread.exe can be patched (write 0xC3 byte at 0xE1B address) then unencrypted dump file will be created.
But what if you do not have a dongle to read information from it? First, take a look on log messages: which cells are reading by your software? Try 0x6669 here, for example. Compile DosBox with heavy debug option and produce all instructions and register's state executed:
http://blogs.conus.info/node/55
... then just grep LOGCPU.TXT for 6669: value from dongle is probably compared with some other constant, however, it is not rule, things may be much more complex.