UP | HOME

Proclaimer

Table of Contents

1. What the heck

Recently I went to a thrift store and found an interesting device. It's called the "Proclaimer®" from a company called "Faith Comes by Hearing®". The device stood out to me because it has:

  • A solar panel
  • Dynamo
  • USB-C
  • µSD card
  • Audio controls

It took me a bit to realize what it was. Especially because when I turned it on I heard a language that was very strange to me. Turns out it's a Bible audio device. This model has the bible in Ndau – a language spoken in Zimbabwe.

I pulled out the µSD card to see what the files where. My hope was that they were just MP3, but it turns out they are an encrypted audio file with the extension ".smp"

I am very impressed by the effort put into a "Missionary in a box" device like this.

2. Images   ATTACH

Here are some photos of the device. It's fairly humble (if you don't count the ® markers on bible quotes) looking.

3. Components

3.1. Chips

ATJ2157 FP51AMQ 36K
Audio processor
cFeon Q32C-104HIP X20Q101 2248HLB
SPI Flash storage
XA5002 1 7042 HBRDHA
Audio amp
Unknown
Near the power control components
Unknown
Near the power switch on the crontrol interface side of the PCB

The ATJ2157 is a pretty common chip, found a in a lot of cheap mp3 players.

3.2. Dynamo

Gears are exposed to the inside of the case, and grease seems to spatter about a bit.

3.3. Solar panel

6.2V output in direct sun light.

3.4. Speaker

Big old school speaker. 4Ω 2W.

3.5. Battery

3.2V 2400mAh LiFePO4 (Mottcell)

4. Notes

4.1. [2025-06-23 Mon]   ATTACH

Using a HydraBus, I was able to extract the firmware.

4.2. [2025-06-17 Tue]

Thanks to a friend, the files can be "decrypted" using 1 byte xor with 0x57.

#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  int f = open(argv[1], O_RDONLY);
  if (f == -1) {
    perror("open");
    return 1;
  }

  char buf[4096];

  unsigned char xor = 0x57;

  while (1) {
    int n = read(f, buf, sizeof(buf));

    if (n == 0) {
      break;
    }

    for (int i = 0; i < n; i++) {
      printf("%c", buf[i] ^ xor);
    }
  }

  // When re-"encrypting" files, uncomment this.
  // printf("lsr");
}

To put file onto the device that it can play, you need re-encode the audio you want to play to match the encoding the device expects:

fmpeg -i $i -c:a libmp3lame -b:a 64k -ar 22050 -joint_stereo 1 small-$i

Once they are re-encoded, run the above C program (with the "lsr" line commented out) against all the files and copy the output onto the µSD card.

4.3. [2025-06-14 Sat]

  • USB-C seems to only be for power.
  • There are "RX" / "TX" pads above the ATJ2157.

5. Links

smp2mp3
potential tool to encrypt / decrypt the files. It seems I would need to extract the private key from the device.
actions_flash
a tool for dumping the firmware from ATJ chips.
audiocube
a python tool for encrypting / decrypting .smp files.

Date: 2025-06-16 Mon 08:58

Author: Aaron Bieber

Created: 2025-08-07 Thu 11:38

Validate