Wednesday 1 January 2025
Overview of Content Published in December
Wednesday 25 December 2024
Update: oledump.py Version 0.0.78
This is a bugfix version.
oledump_V0_0_78.zip (http)MD5: EAE4457988371D88FED6F063BBBDADC7
SHA256: 01D314C505C1C5A0AFF8CE8A5910223FA8511E27F1B2DB6054864723B5677581
Tuesday 3 December 2024
Update: 1768.py Version 0.0.22
This is a bug fix version.
1768_v0_0_22.zip (http)MD5: 6446F5C09BF70FAFBB3171734844B350
SHA256: 4716A4A72FB4C0265CAF541D5FF709615B9CB4129C20C98F1BBA535AA5D40717
Monday 2 December 2024
Overview of Content Published in November
- Update: pdfid.py Version 0.2.9
- Update: pdf-parser.py Version 0.7.10
- Update: xmldump.py Version 0.0.9
- Update: strings.py Version 0.0.10
- Quickpost: The Electric Energy Consumption Of A Wired Doorbell
- Update: base64dump.py Version 0.0.26
- Quickpost: The Electric Energy Consumption Of A Soundbar
- Interfacing With A Cheap Geiger Counter
- Update: base64dump.py Version 0.0.27
- qpdf: Extracting PDF Streams
- Analyzing an Encrypted Phishing PDF
- SANS Holiday Hack Challenge 2024
- zipdump & Evasive ZIP Concatenation
- zipdump & PKZIP Records
- PDF Object Streams
- Increase In Phishing SVG Attachments
- Wireshark 4.4.2 Released
- Decrypting a PDF With a User Password
- Quick & Dirty Obfuscated JavaScript Analysis
- Quickie: Mass BASE64 Decoding
Sunday 24 November 2024
Update: base64dump.py Version 0.0.27
When all items are selected with -s A and option -d from this new version on, items are decoded and dumped to stdout en separated by end-of-line character(s).
base64dump_V0_0_27.zip (http)MD5: 6C3AE99A7FA0C525FF17B938A632AE53
SHA256: CDD84F574E25C93675BC0C14D954B59799B1FFEECC253A906B72A6DD669BDF4C
Friday 22 November 2024
Interfacing With A Cheap Geiger Counter
I got a cheap Geiger counter from Aliexpress:

This picture was taken on an airplane: you have more radiation (cosmic rays) at high altitude.
I figured out how to interface with this counter in Python to log real time data:
#!/usr/bin/env python
from __future__ import print_function
__description__ = "Program for geiger meter"
__author__ = 'Didier Stevens'
__version__ = '0.0.1'
__date__ = '2024/05/11'
"""
Source code put in the public domain by Didier Stevens, no Copyright
https://DidierStevens.com
Use at your own risk
History:
2024/05/11: start
Todo:
"""
import optparse
import serial
import time
def FormatTime(epoch=None):
if epoch == None:
epoch = time.time()
return '%04d%02d%02d-%02d%02d%02d' % time.localtime(epoch)[0:6]
def FindCOMPorts():
ports = []
for number in range(1, 10):
try:
comport = 'COM%d' % number
with serial.Serial(comport) as oSerial:
ports.append(comport)
except serial.serialutil.SerialException as e:
if 'PermissionError' in e.args[0]:
ports.append(comport)
return ports
def LogToCSV(comport):
ser = serial.Serial(comport, 115200, timeout=0, write_timeout=0)
ser.write(b'\xAA\x05\x0E\x01\xBE\x55\x00')
alldata = b''
fOut = open('geiger.csv', 'a')
while True:
data = ser.read(1000)
if data != b'':
alldata += data
lines = alldata.split(b'\xaaU\x0e')
alldata = lines[-1]
lines = lines[:-1]
for line in lines:
if line != b'':
out = FormatTime() + ';' + line.decode('latin')
print(out)
fOut.write(out + '\n')
if alldata.endswith(b'U') and not alldata.endswith(b'\xaaU'):
out = FormatTime() + ';' + alldata.decode('latin')
print(out)
fOut.write(out + '\n')
alldata = b''
time.sleep(0.40)
def Main():
oParser = optparse.OptionParser(usage='usage: %prog [options]\n' + __description__ , version='%prog ' + __version__)
oParser.add_option('-l', '--listports', action='store_true', default=False, help='List ports')
(options, args) = oParser.parse_args()
comports = FindCOMPorts()
if options.listports:
print('Available ports:')
for comport in comports:
print(' %s' % comport)
return
if len(args) == 1:
LogToCSV(args[0])
elif len(comports) == 1:
print('Using %s' % comports[0])
LogToCSV(comports[0])
else:
print('Provide the COM port as argument')
print('Available ports:')
for comport in comports:
print(' %s' % comport)
if __name__ == '__main__':
Main()
Thursday 21 November 2024
Quickpost: The Electric Energy Consumption Of A Soundbar
I have a Samsung Neo QLED 65 inch TV.
Its standby power consumption is pretty good: 1,3 Watt.
It comes with a soundbar, and its standby power consumption is pretty awful: 5,5 Watt!
Quickpost info
Wednesday 20 November 2024
Update: base64dump.py Version 0.0.26
This is a bugfix version.
base64dump_V0_0_26.zip (http)MD5: CD4370499288015C7EE13B59CB062129
SHA256: 3EEB76875ECCA782293D4486286F8155D1BB04DF23E3D3433E36C6373389B81D
Sunday 3 November 2024
Quickpost: The Electric Energy Consumption Of A Wired Doorbell
I have a classic wired doorbell at home: the 230V powered transformer produces 12V on its secondary winding. The circuit on that secondary winding powers an electromechanical doorbell via a pushbutton. The bell rings (“ding-dong”) when the button is pushed (closing the circuit).
Since losses occur in all transformers, I wanted to know how much my doorbell transformer consumes in standby mode (doorbell not ringing). The primary winding is always energized, as the pushbutton (normal-open switch) is on the circuit of the secondary winding.
I made the measurements on the primary winding: 3,043 Watt. That’s more than I expected, so I double-checked, and noticed I had forgotten this:

There’s a small incandescent light-bulb in the doorbell button. That consumes power too!
Second set of measurements after removing the light-bulb: 1,475 Watt.
So with light-bulb, my doorbell consumes 3 Watt 24/7, and 1,5 Watt without light-bulb.
1,5 Watt is very similar to the standby consumption of linear power supplies. As energy experts here in Europe advice to replace linear power supplies in favor of switched-mode power supplies, I wonder why they never mention doorbells … Replacing your doorbell would not be as easy as replacing a (USB) charger though (it would best be done by an electrician), so that might explain it, but on the other hand, there are enough energy experts proposing impractical solutions.
3 Watt is 26,28 kWh for a whole year. In my case, that’s a cost of €5,89 (that’s total cost: electricity plus taxes). I could reduce this by half, just by removing the incandescent light-bulb.
Should I do this? Well, the decision has already been taken for me: I dropped the light-bulb while it was still hot, and the impact broke the filament …
For comparison: 3 Watt is at least three times higher than the individual standby consumption of our appliances like TV, fridge, freezer, …
Yet another comparison: asking an LLM to write an email requires less (< 0,3 Wh) than my doorbell over a period of an hour (3 Wh).
Quickpost info
Saturday 2 November 2024
Update: strings.py Version 0.0.10
This small update brings support for ZIP 2.0 via the pyzipper module.
strings_V0_0_10.zip (http)MD5: F98C9D646A83322BC9226673D79FFE2D
SHA256: 7C062616C95DE5DDF0792A8CE9CA0CCA14FF43A8786DCED043193B729361BB59